aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/bufwrite.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/bufwrite.c')
-rw-r--r--src/nvim/bufwrite.c25
1 files changed, 9 insertions, 16 deletions
diff --git a/src/nvim/bufwrite.c b/src/nvim/bufwrite.c
index 94a6604fc1..27de03954a 100644
--- a/src/nvim/bufwrite.c
+++ b/src/nvim/bufwrite.c
@@ -900,38 +900,31 @@ static int buf_write_make_backup(char *fname, bool append, FileInfo *file_info_o
// remove old backup, if present
os_remove(*backupp);
+ // copy the file
+ if (os_copy(fname, *backupp, UV_FS_COPYFILE_FICLONE) != 0) {
+ *err = set_err(_("E509: Cannot create backup file (add ! to override)"));
+ XFREE_CLEAR(*backupp);
+ *backupp = NULL;
+ continue;
+ }
+
// set file protection same as original file, but
// strip s-bit.
os_setperm(*backupp, perm & 0777);
#ifdef UNIX
- //
// Try to set the group of the backup same as the original file. If
// this fails, set the protection bits for the group same as the
// protection bits for others.
- //
if (file_info_new.stat.st_gid != file_info_old->stat.st_gid
&& os_chown(*backupp, (uv_uid_t)-1, (uv_gid_t)file_info_old->stat.st_gid) != 0) {
os_setperm(*backupp, (perm & 0707) | ((perm & 07) << 3));
}
-# ifdef HAVE_XATTR
- os_copy_xattr(fname, *backupp);
-# endif
-#endif
-
- // copy the file
- if (os_copy(fname, *backupp, UV_FS_COPYFILE_FICLONE) != 0) {
- *err = set_err(_("E509: Cannot create backup file (add ! to override)"));
- XFREE_CLEAR(*backupp);
- *backupp = NULL;
- continue;
- }
-
-#ifdef UNIX
os_file_settime(*backupp,
(double)file_info_old->stat.st_atim.tv_sec,
(double)file_info_old->stat.st_mtim.tv_sec);
#endif
+
os_set_acl(*backupp, acl);
#ifdef HAVE_XATTR
os_copy_xattr(fname, *backupp);