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