1 #define _GNU_SOURCE 2 #include <dirent.h> 3 #include <fcntl.h> 4 #include <stdlib.h> 5 #include <stdio.h> 6 #include "__dirent.h" 7 #include "syscall.h" 8 9 #ifndef __LITEOS__ __get_dir_tag(DIR * dir)10uint64_t __get_dir_tag(DIR* dir) 11 { 12 return fdsan_create_owner_tag(FDSAN_OWNER_TYPE_DIRECTORY, (uint64_t)dir); 13 } 14 #endif 15 opendir(const char * name)16DIR *opendir(const char *name) 17 { 18 int fd; 19 DIR *dir; 20 21 if ((fd = open(name, O_RDONLY|O_DIRECTORY|O_CLOEXEC)) < 0) 22 return 0; 23 if (!(dir = calloc(1, sizeof *dir))) { 24 __syscall(SYS_close, fd); 25 return 0; 26 } 27 dir->fd = fd; 28 #ifndef __LITEOS__ 29 fdsan_exchange_owner_tag(fd, 0, __get_dir_tag(dir)); 30 #endif 31 return dir; 32 } 33