Index: fusl/src/stat/fstat.c |
diff --git a/fusl/src/stat/fstat.c b/fusl/src/stat/fstat.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ab4afc0f9220cc53951630128e6b8f8ac295b842 |
--- /dev/null |
+++ b/fusl/src/stat/fstat.c |
@@ -0,0 +1,24 @@ |
+#include <sys/stat.h> |
+#include <errno.h> |
+#include <fcntl.h> |
+#include "syscall.h" |
+#include "libc.h" |
+ |
+void __procfdname(char *, unsigned); |
+ |
+int fstat(int fd, struct stat *st) |
+{ |
+ int ret = __syscall(SYS_fstat, fd, st); |
+ if (ret != -EBADF || __syscall(SYS_fcntl, fd, F_GETFD) < 0) |
+ return __syscall_ret(ret); |
+ |
+ char buf[15+3*sizeof(int)]; |
+ __procfdname(buf, fd); |
+#ifdef SYS_stat |
+ return syscall(SYS_stat, buf, st); |
+#else |
+ return syscall(SYS_fstatat, AT_FDCWD, buf, st, 0); |
+#endif |
+} |
+ |
+LFS64(fstat); |