suppress EINTR in sem_wait and sem_timedwait
[musl] / src / dirent / fdopendir.c
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
8 DIR *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 }