From 6b89c385d8bd0700b25bac2c2d0bebe68d5cc05d Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Wed, 22 Jan 2020 18:56:04 +0100 Subject: io: Implement lchmod using fchmodat [BZ #14578] --- include/sys/stat.h | 1 + io/fchmodat.c | 1 + io/lchmod.c | 10 ++++------ sysdeps/mach/hurd/fchmodat.c | 1 + 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 @@ . */ #include -#include +#include #include +#include /* 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) -- cgit 1.4.1