From cd142e3369db8888163a511dbe9907bcd138829c Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Thu, 16 Nov 2017 17:03:45 +0100 Subject: patch 8.0.1300: file permissions may end up wrong when writing Problem: File permissions may end up wrong when writing. Solution: Use fchmod() instead of chmod() when possible. Don't truncate until we know we can change the file. --- src/os_unix.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'src/os_unix.c') diff --git a/src/os_unix.c b/src/os_unix.c index a39caffe4..d2f080529 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -2725,9 +2725,8 @@ mch_getperm(char_u *name) } /* - * set file permission for 'name' to 'perm' - * - * return FAIL for failure, OK otherwise + * Set file permission for "name" to "perm". + * Return FAIL for failure, OK otherwise. */ int mch_setperm(char_u *name, long perm) @@ -2741,6 +2740,18 @@ mch_setperm(char_u *name, long perm) (mode_t)perm) == 0 ? OK : FAIL); } +#if defined(HAVE_FCHMOD) || defined(PROTO) +/* + * Set file permission for open file "fd" to "perm". + * Return FAIL for failure, OK otherwise. + */ + int +mch_fsetperm(int fd, long perm) +{ + return (fchmod(fd, (mode_t)perm) == 0 ? OK : FAIL); +} +#endif + #if defined(HAVE_ACL) || defined(PROTO) # ifdef HAVE_SYS_ACL_H # include -- cgit v1.2.1