opendir.c raw

   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  
   8  DIR *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