fix failure of fchmod, fstat, fchdir, and fchown to produce EBADF
[musl] / src / stat / fstat.c
1 #include <sys/stat.h>
2 #include <errno.h>
3 #include <fcntl.h>
4 #include "syscall.h"
5 #include "libc.h"
6
7 void __procfdname(char *, unsigned);
8
9 int fstat(int fd, struct stat *st)
10 {
11         int ret = __syscall(SYS_fstat, fd, st);
12         if (ret != -EBADF || __syscall(SYS_fcntl, fd, F_GETFD) < 0)
13                 return __syscall_ret(ret);
14
15         char buf[15+3*sizeof(int)];
16         __procfdname(buf, fd);
17         return syscall(SYS_stat, buf, st);
18 }
19
20 LFS64(fstat);