[PATCH 6/6] Add generic implementation of fdopendir()

Sebastian Huber <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
Signed-off-by: Sebastian Huber <[email protected]>
---
 newlib/libc/posix/opendir.c | 29 +++++++++++++++++++++--------
 1 file changed, 21 insertions(+), 8 deletions(-)

diff --git a/newlib/libc/posix/opendir.c b/newlib/libc/posix/opendir.c
index 650cbfe8d..2cf1ba541 100644
--- a/newlib/libc/posix/opendir.c
+++ b/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 */
-- 
2.16.4
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.