This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH 2/5] io: Implement lchmod using fchmodat [BZ #14578]
- From: Florian Weimer <fweimer at redhat dot com>
- To: libc-alpha at sourceware dot org
- Date: Wed, 22 Jan 2020 21:03:25 +0100
- Subject: [PATCH 2/5] io: Implement lchmod using fchmodat [BZ #14578]
- References: <cover.1579723048.git.fweimer@redhat.com>
---
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 @@
<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)
--
2.24.1