Browse Source

Add generic implementation of fdopendir()

Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
sh3port
Sebastian Huber 3 years ago
parent
commit
103b055035
  1. 29
      newlib/libc/posix/opendir.c

29
newlib/libc/posix/opendir.c

@ -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 */

Loading…
Cancel
Save