Mercurial > vim
comparison src/os_unix.c @ 12847:14f287552218 v8.0.1300
patch 8.0.1300: file permissions may end up wrong when writing
commit https://github.com/vim/vim/commit/cd142e3369db8888163a511dbe9907bcd138829c
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Nov 16 17:03:45 2017 +0100
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.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Thu, 16 Nov 2017 17:15:06 +0100 |
parents | 351cf7c67bbe |
children | ebb4f6c93598 |
comparison
equal
deleted
inserted
replaced
12846:09b3b28f4400 | 12847:14f287552218 |
---|---|
2723 return statb.st_mode; | 2723 return statb.st_mode; |
2724 #endif | 2724 #endif |
2725 } | 2725 } |
2726 | 2726 |
2727 /* | 2727 /* |
2728 * set file permission for 'name' to 'perm' | 2728 * Set file permission for "name" to "perm". |
2729 * | 2729 * Return FAIL for failure, OK otherwise. |
2730 * return FAIL for failure, OK otherwise | |
2731 */ | 2730 */ |
2732 int | 2731 int |
2733 mch_setperm(char_u *name, long perm) | 2732 mch_setperm(char_u *name, long perm) |
2734 { | 2733 { |
2735 return (chmod((char *) | 2734 return (chmod((char *) |
2738 #else | 2737 #else |
2739 name, | 2738 name, |
2740 #endif | 2739 #endif |
2741 (mode_t)perm) == 0 ? OK : FAIL); | 2740 (mode_t)perm) == 0 ? OK : FAIL); |
2742 } | 2741 } |
2742 | |
2743 #if defined(HAVE_FCHMOD) || defined(PROTO) | |
2744 /* | |
2745 * Set file permission for open file "fd" to "perm". | |
2746 * Return FAIL for failure, OK otherwise. | |
2747 */ | |
2748 int | |
2749 mch_fsetperm(int fd, long perm) | |
2750 { | |
2751 return (fchmod(fd, (mode_t)perm) == 0 ? OK : FAIL); | |
2752 } | |
2753 #endif | |
2743 | 2754 |
2744 #if defined(HAVE_ACL) || defined(PROTO) | 2755 #if defined(HAVE_ACL) || defined(PROTO) |
2745 # ifdef HAVE_SYS_ACL_H | 2756 # ifdef HAVE_SYS_ACL_H |
2746 # include <sys/acl.h> | 2757 # include <sys/acl.h> |
2747 # endif | 2758 # endif |