Index: fusl/src/unistd/fchown.c |
diff --git a/fusl/src/unistd/fchown.c b/fusl/src/unistd/fchown.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..03459849e50a3436d5bec51a4763375e05c4796d |
--- /dev/null |
+++ b/fusl/src/unistd/fchown.c |
@@ -0,0 +1,22 @@ |
+#include <unistd.h> |
+#include <errno.h> |
+#include <fcntl.h> |
+#include "syscall.h" |
+ |
+void __procfdname(char *, unsigned); |
+ |
+int fchown(int fd, uid_t uid, gid_t gid) |
+{ |
+ int ret = __syscall(SYS_fchown, fd, uid, gid); |
+ 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_chown |
+ return syscall(SYS_chown, buf, uid, gid); |
+#else |
+ return syscall(SYS_fchownat, AT_FDCWD, buf, uid, gid); |
+#endif |
+ |
+} |