repo.or.cz
/
musl.git
/
blob
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
log
|
graphiclog1
|
graphiclog2
|
commit
|
commitdiff
|
tree
|
refs
|
edit
|
fork
blame
|
history
|
raw
|
HEAD
implement posix_getdents adopted for next issue of POSIX
[musl.git]
/
src
/
dirent
/
fdopendir.c
blob
d78fb87f9bc909dcbf4a81a779a76dcb89696b17
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
(
fcntl
(
fd
,
F_GETFL
) &
O_PATH
) {
17
errno
=
EBADF
;
18
return
0
;
19
}
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
}