Add generic implementation of fdopendir()

Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
This commit is contained in:
Sebastian Huber 2018-10-08 13:52:14 +02:00
parent ab4fdab5d5
commit 103b055035
1 changed files with 21 additions and 8 deletions

View File

@ -43,17 +43,11 @@ static char sccsid[] = "@(#)opendir.c 5.11 (Berkeley) 2/23/91";
#include <unistd.h>
#include <sys/lock.h>
/*
* open a directory.
*/
DIR *
opendir (const char *name)
static DIR *
_opendir_common(int fd)
{
DIR *dirp;
int fd;
if ((fd = open(name, O_RDONLY | O_DIRECTORY | O_CLOEXEC)) == -1)
return NULL;
if ((dirp = (DIR *)malloc(sizeof(DIR))) == NULL) {
close (fd);
return NULL;
@ -87,4 +81,23 @@ opendir (const char *name)
return dirp;
}
DIR *
opendir(const char *name)
{
int fd;
if ((fd = open(name, O_RDONLY | O_DIRECTORY | O_CLOEXEC)) == -1)
return (NULL);
return (_opendir_common(fd));
}
DIR *
fdopendir(int fd)
{
if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1)
return (NULL);
return (_opendir_common(fd));
}
#endif /* ! HAVE_OPENDIR */