diff options
author | Florian Weimer <fweimer@redhat.com> | 2020-01-22 18:56:04 +0100 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2020-02-12 08:43:59 +0100 |
commit | 6b89c385d8bd0700b25bac2c2d0bebe68d5cc05d (patch) | |
tree | 9daf6ad81d41930593a0ed2a3c027d52a9bcf05d | |
parent | 6c80c6e8767b860a5e18e136d04a80be2a8dce15 (diff) | |
download | glibc-6b89c385d8bd0700b25bac2c2d0bebe68d5cc05d.tar.gz glibc-6b89c385d8bd0700b25bac2c2d0bebe68d5cc05d.tar.xz glibc-6b89c385d8bd0700b25bac2c2d0bebe68d5cc05d.zip |
io: Implement lchmod using fchmodat [BZ #14578]
-rw-r--r-- | include/sys/stat.h | 1 | ||||
-rw-r--r-- | io/fchmodat.c | 1 | ||||
-rw-r--r-- | io/lchmod.c | 10 | ||||
-rw-r--r-- | sysdeps/mach/hurd/fchmodat.c | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/fchmodat.c | 1 |
5 files changed, 8 insertions, 6 deletions
diff --git a/include/sys/stat.h b/include/sys/stat.h index b82d452780..92284ca48b 100644 --- a/include/sys/stat.h +++ b/include/sys/stat.h @@ -9,6 +9,7 @@ extern int __lstat (const char *__file, struct stat *__buf); extern int __chmod (const char *__file, __mode_t __mode); libc_hidden_proto (__chmod) extern int __fchmod (int __fd, __mode_t __mode); +libc_hidden_proto (fchmodat) extern __mode_t __umask (__mode_t __mask); extern int __mkdir (const char *__path, __mode_t __mode); libc_hidden_proto (__mkdir) diff --git a/io/fchmodat.c b/io/fchmodat.c index 7f3a07aaa2..78895ac187 100644 --- a/io/fchmodat.c +++ b/io/fchmodat.c @@ -42,3 +42,4 @@ fchmodat (int fd, const char *file, mode_t mode, int flag) return -1; } stub_warning (fchmodat) +libc_hidden_def (fchmodat) diff --git a/io/lchmod.c b/io/lchmod.c index 90b33a49f9..8b788034ee 100644 --- a/io/lchmod.c +++ b/io/lchmod.c @@ -1,4 +1,4 @@ -/* lchmod -- Change the protections of a file or symbolic link. Stub version. +/* lchmod -- Change the protections of a file or symbolic link. Generic version. Copyright (C) 2002-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -17,15 +17,13 @@ <https://www.gnu.org/licenses/>. */ #include <errno.h> -#include <sys/stat.h> +#include <fcntl.h> #include <sys/types.h> +#include <unistd.h> /* Change the protections of FILE to MODE. */ int lchmod (const char *file, mode_t mode) { - __set_errno (ENOSYS); - return -1; + return fchmodat (AT_FDCWD, file, mode, AT_SYMLINK_NOFOLLOW); } - -stub_warning (lchmod) diff --git a/sysdeps/mach/hurd/fchmodat.c b/sysdeps/mach/hurd/fchmodat.c index cd227d5c83..d42f9520e9 100644 --- a/sysdeps/mach/hurd/fchmodat.c +++ b/sysdeps/mach/hurd/fchmodat.c @@ -37,3 +37,4 @@ fchmodat (int fd, const char *file, mode_t mode, int flag) return __hurd_fail (err); return 0; } +libc_hidden_def (fchmodat) diff --git a/sysdeps/unix/sysv/linux/fchmodat.c b/sysdeps/unix/sysv/linux/fchmodat.c index 224439ffba..c41ebb290d 100644 --- a/sysdeps/unix/sysv/linux/fchmodat.c +++ b/sysdeps/unix/sysv/linux/fchmodat.c @@ -38,3 +38,4 @@ fchmodat (int fd, const char *file, mode_t mode, int flag) return INLINE_SYSCALL (fchmodat, 3, fd, file, mode); } +libc_hidden_def (fchmodat) |