Index: fusl/src/stat/fchmod.c |
diff --git a/fusl/src/stat/fchmod.c b/fusl/src/stat/fchmod.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..93e1b64c57f9046b5446292360f1564611307db7 |
--- /dev/null |
+++ b/fusl/src/stat/fchmod.c |
@@ -0,0 +1,21 @@ |
+#include <sys/stat.h> |
+#include <errno.h> |
+#include <fcntl.h> |
+#include "syscall.h" |
+ |
+void __procfdname(char *, unsigned); |
+ |
+int fchmod(int fd, mode_t mode) |
+{ |
+ int ret = __syscall(SYS_fchmod, fd, mode); |
+ 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_chmod |
+ return syscall(SYS_chmod, buf, mode); |
+#else |
+ return syscall(SYS_fchmodat, AT_FDCWD, buf, mode); |
+#endif |
+} |