Index: fusl/src/dirent/fdopendir.c |
diff --git a/fusl/src/dirent/fdopendir.c b/fusl/src/dirent/fdopendir.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c377271da53919acb39f5929ded9d77f874f7e55 |
--- /dev/null |
+++ b/fusl/src/dirent/fdopendir.c |
@@ -0,0 +1,27 @@ |
+#include <dirent.h> |
+#include <fcntl.h> |
+#include <sys/stat.h> |
+#include <errno.h> |
+#include <stdlib.h> |
+#include "__dirent.h" |
+ |
+DIR *fdopendir(int fd) |
+{ |
+ DIR *dir; |
+ struct stat st; |
+ |
+ if (fstat(fd, &st) < 0) { |
+ return 0; |
+ } |
+ if (!S_ISDIR(st.st_mode)) { |
+ errno = ENOTDIR; |
+ return 0; |
+ } |
+ if (!(dir = calloc(1, sizeof *dir))) { |
+ return 0; |
+ } |
+ |
+ fcntl(fd, F_SETFD, FD_CLOEXEC); |
+ dir->fd = fd; |
+ return dir; |
+} |