1#include <dirent.h> 2#include <fcntl.h> 3#include <sys/stat.h> 4#include <errno.h> 5#include <stdlib.h> 6#include "__dirent.h" 7 8DIR *fdopendir(int fd) 9{ 10 DIR *dir; 11 struct stat st; 12 13 if (fstat(fd, &st) < 0) { 14 return 0; 15 } 16 if (!S_ISDIR(st.st_mode)) { 17 errno = ENOTDIR; 18 return 0; 19 } 20 if (!(dir = calloc(1, sizeof *dir))) { 21 return 0; 22 } 23 24 fcntl(fd, F_SETFD, FD_CLOEXEC); 25 dir->fd = fd; 26 return dir; 27} 28