]> git.proxmox.com Git - wasi-libc.git/blame - libc-top-half/musl/src/dirent/fdopendir.c
Update to musl 1.1.22.
[wasi-libc.git] / libc-top-half / musl / src / dirent / fdopendir.c
CommitLineData
320054e8
DG
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
8DIR *fdopendir(int fd)
9{
10 DIR *dir;
11 struct stat st;
12
13 if (fstat(fd, &st) < 0) {
14 return 0;
15 }
f41256b6
DG
16 if (fcntl(fd, F_GETFL) & O_PATH) {
17 errno = EBADF;
18 return 0;
19 }
320054e8
DG
20 if (!S_ISDIR(st.st_mode)) {
21 errno = ENOTDIR;
22 return 0;
23 }
24 if (!(dir = calloc(1, sizeof *dir))) {
25 return 0;
26 }
27
28 fcntl(fd, F_SETFD, FD_CLOEXEC);
29 dir->fd = fd;
30 return dir;
31}