Mercurial > vim
diff src/ex_cmds.c @ 601:bc7ec0f1f7f3 v7.0170
updated for version 7.0170
author | vimboss |
---|---|
date | Wed, 14 Dec 2005 22:08:35 +0000 |
parents | 3686831cf3da |
children | 9e359e5759f6 |
line wrap: on
line diff
--- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -1656,6 +1656,9 @@ write_viminfo(file, forceit) int shortname = FALSE; /* use 8.3 file name */ struct stat st_old; /* mch_stat() of existing viminfo file */ #endif +#ifdef WIN3264 + long perm = -1; +#endif if (no_viminfo()) return; @@ -1713,6 +1716,10 @@ write_viminfo(file, forceit) goto end; } #endif +#ifdef WIN3264 + /* Get the file attributes of the existing viminfo file. */ + perm = mch_getperm(fname); +#endif /* * Make tempname. @@ -1803,15 +1810,16 @@ write_viminfo(file, forceit) int fd; /* Use mch_open() to be able to use O_NOFOLLOW and set file - * protection same as original file, but strip s-bit. */ + * protection: + * Unix: same as original file, but strip s-bit. + * Others: r&w for user only. */ #ifdef UNIX fd = mch_open((char *)tempname, O_CREAT|O_EXTRA|O_EXCL|O_WRONLY|O_NOFOLLOW, (int)((st_old.st_mode & 0777) | 0600)); #else fd = mch_open((char *)tempname, - O_CREAT|O_EXTRA|O_EXCL|O_WRONLY|O_NOFOLLOW, - 0600); /* r&w for user only */ + O_CREAT|O_EXTRA|O_EXCL|O_WRONLY|O_NOFOLLOW, 0600); #endif if (fd < 0) fp_out = NULL; @@ -1866,12 +1874,21 @@ write_viminfo(file, forceit) if (fp_in != NULL) { fclose(fp_in); + /* - * In case of an error, don't overwrite the original viminfo file. + * In case of an error keep the original viminfo file. + * Otherwise rename the newly written file. */ if (viminfo_errcnt || vim_rename(tempname, fname) == -1) mch_remove(tempname); - } + +#ifdef WIN3264 + /* If the viminfo file was hidden then also hide the new file. */ + if (perm > 0 && (perm & FILE_ATTRIBUTE_HIDDEN)) + mch_hide(fname); +#endif + } + end: vim_free(fname); vim_free(tempname);