|
@@ -11,18 +11,26 @@
|
|
#include <unistd.h>
|
|
#include <unistd.h>
|
|
#include <bits/wordsize.h>
|
|
#include <bits/wordsize.h>
|
|
|
|
|
|
|
|
+#if defined __NR_fchownat && !defined __NR_chown
|
|
|
|
+# include <fcntl.h>
|
|
|
|
+int chown(const char *path, uid_t owner, gid_t group)
|
|
|
|
+{
|
|
|
|
+ return fchownat(AT_FDCWD, path, owner, group, 0);
|
|
|
|
+}
|
|
|
|
|
|
-#if (__WORDSIZE == 32 && defined(__NR_chown32)) || __WORDSIZE == 64
|
|
+#else
|
|
-# ifdef __NR_chown32
|
|
+
|
|
-# undef __NR_chown
|
|
+# if (__WORDSIZE == 32 && defined(__NR_chown32)) || __WORDSIZE == 64
|
|
-# define __NR_chown __NR_chown32
|
|
+# ifdef __NR_chown32
|
|
-# endif
|
|
+# undef __NR_chown
|
|
|
|
+# define __NR_chown __NR_chown32
|
|
|
|
+# endif
|
|
|
|
|
|
_syscall3(int, chown, const char *, path, uid_t, owner, gid_t, group)
|
|
_syscall3(int, chown, const char *, path, uid_t, owner, gid_t, group)
|
|
|
|
|
|
-#else
|
|
+# else
|
|
|
|
|
|
-# define __NR___syscall_chown __NR_chown
|
|
+# define __NR___syscall_chown __NR_chown
|
|
static __inline__ _syscall3(int, __syscall_chown, const char *, path,
|
|
static __inline__ _syscall3(int, __syscall_chown, const char *, path,
|
|
__kernel_uid_t, owner, __kernel_gid_t, group)
|
|
__kernel_uid_t, owner, __kernel_gid_t, group)
|
|
|
|
|
|
@@ -35,6 +43,7 @@ int chown(const char *path, uid_t owner, gid_t group)
|
|
}
|
|
}
|
|
return (__syscall_chown(path, owner, group));
|
|
return (__syscall_chown(path, owner, group));
|
|
}
|
|
}
|
|
-#endif
|
|
+# endif
|
|
|
|
|
|
|
|
+#endif
|
|
libc_hidden_def(chown)
|
|
libc_hidden_def(chown)
|