aboutsummaryrefslogtreecommitdiff
path: root/src/ex_cmds.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ex_cmds.c')
-rw-r--r--src/ex_cmds.c27
1 files changed, 12 insertions, 15 deletions
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index c2c3b6631d..3613a02cb3 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -1496,9 +1496,6 @@ void write_viminfo(char_u *file, int forceit)
#if defined(UNIX)
mode_t umask_save;
#endif
-#ifdef UNIX
- struct stat st_old; /* mch_stat() of existing viminfo file */
-#endif
if (no_viminfo())
return;
@@ -1535,16 +1532,15 @@ void write_viminfo(char_u *file, int forceit)
* overwrite a user's viminfo file after a "su root", with a
* viminfo file that the user can't read.
*/
- st_old.st_dev = (dev_t)0;
- st_old.st_ino = 0;
- st_old.st_mode = 0600;
- if (mch_stat((char *)fname, &st_old) == 0
+
+ FileInfo old_info; // FileInfo of existing viminfo file
+ if (os_get_file_info((char *)fname, &old_info)
&& getuid() != ROOT_UID
- && !(st_old.st_uid == getuid()
- ? (st_old.st_mode & 0200)
- : (st_old.st_gid == getgid()
- ? (st_old.st_mode & 0020)
- : (st_old.st_mode & 0002)))) {
+ && !(old_info.stat.st_uid == getuid()
+ ? (old_info.stat.st_mode & 0200)
+ : (old_info.stat.st_gid == getgid()
+ ? (old_info.stat.st_mode & 0020)
+ : (old_info.stat.st_mode & 0002)))) {
int tt = msg_didany;
/* avoid a wait_return for this message, it's annoying */
@@ -1596,7 +1592,7 @@ void write_viminfo(char_u *file, int forceit)
umask_save = umask(0);
fd = mch_open((char *)tempname,
O_CREAT|O_EXCL|O_WRONLY|O_NOFOLLOW,
- (int)((st_old.st_mode & 0777) | 0600));
+ (int)((old_info.stat.st_mode & 0777) | 0600));
(void)umask(umask_save);
# else
fd = mch_open((char *)tempname,
@@ -1622,8 +1618,9 @@ void write_viminfo(char_u *file, int forceit)
* Make sure the owner can read/write it. This only works for
* root.
*/
- if (fp_out != NULL)
- ignored = fchown(fileno(fp_out), st_old.st_uid, st_old.st_gid);
+ if (fp_out != NULL) {
+ fchown(fileno(fp_out), old_info.stat.st_uid, old_info.stat.st_gid);
+ }
#endif
}
}