1 #define _GNU_SOURCE 2 #include <dirent.h> 3 #include <fcntl.h> 4 #include <stdlib.h> 5 #include "__dirent.h" 6 #include "syscall.h" 7 opendir(const char * name)8DIR *opendir(const char *name) 9 { 10 int fd; 11 DIR *dir; 12 13 if ((fd = open(name, O_RDONLY|O_DIRECTORY|O_CLOEXEC)) < 0) 14 return 0; 15 if (!(dir = calloc(1, sizeof *dir))) { 16 __syscall(SYS_close, fd); 17 return 0; 18 } 19 dir->fd = fd; 20 return dir; 21 } 22