0
0
mirror of https://github.com/vim/vim.git synced 2025-09-29 04:34:16 -04:00

updated for version 7.0158

This commit is contained in:
Bram Moolenaar
2005-11-23 21:25:05 +00:00
parent af289d333a
commit a5792f5890
90 changed files with 9703 additions and 4368 deletions

View File

@@ -3111,7 +3111,12 @@ buf_write(buf, fname, sfname, start, end, eap, append, forceit,
if (st_old.st_nlink > 1
|| mch_lstat((char *)fname, &st) < 0
|| st.st_dev != st_old.st_dev
|| st.st_ino != st_old.st_ino)
|| st.st_ino != st_old.st_ino
# ifndef HAVE_FCHOWN
|| st.st_uid != st_old.st_uid
|| st.st_gid != st_old.st_gid
# endif
)
backup_copy = TRUE;
else
# endif
@@ -3126,18 +3131,19 @@ buf_write(buf, fname, sfname, start, end, eap, append, forceit,
for (i = 4913; ; i += 123)
{
sprintf((char *)gettail(IObuff), "%d", i);
if (mch_stat((char *)IObuff, &st) < 0)
if (mch_lstat((char *)IObuff, &st) < 0)
break;
}
fd = mch_open((char *)IObuff, O_CREAT|O_WRONLY|O_EXCL, perm);
close(fd);
fd = mch_open((char *)IObuff,
O_CREAT|O_WRONLY|O_EXCL|O_NOFOLLOW, perm);
if (fd < 0) /* can't write in directory */
backup_copy = TRUE;
else
{
# ifdef UNIX
chown((char *)IObuff, st_old.st_uid, st_old.st_gid);
(void)mch_setperm(IObuff, perm);
# ifdef HAVE_FCHOWN
fchown(fd, st_old.st_uid, st_old.st_gid);
# endif
if (mch_stat((char *)IObuff, &st) < 0
|| st.st_uid != st_old.st_uid
|| st.st_gid != st_old.st_gid
@@ -3145,6 +3151,7 @@ buf_write(buf, fname, sfname, start, end, eap, append, forceit,
backup_copy = TRUE;
# endif
mch_remove(IObuff);
close(fd);
}
}
}
@@ -3338,7 +3345,8 @@ buf_write(buf, fname, sfname, start, end, eap, append, forceit,
/* Open with O_EXCL to avoid the file being created while
* we were sleeping (symlink hacker attack?) */
bfd = mch_open((char *)backup,
O_WRONLY|O_CREAT|O_EXTRA|O_EXCL, perm & 0777);
O_WRONLY|O_CREAT|O_EXTRA|O_EXCL|O_NOFOLLOW,
perm & 0777);
if (bfd < 0)
{
vim_free(backup);
@@ -3357,11 +3365,9 @@ buf_write(buf, fname, sfname, start, end, eap, append, forceit,
* bits for the group same as the protection bits for
* others.
*/
if (st_new.st_gid != st_old.st_gid &&
if (st_new.st_gid != st_old.st_gid
# ifdef HAVE_FCHOWN /* sequent-ptx lacks fchown() */
fchown(bfd, (uid_t)-1, st_old.st_gid) != 0
# else
chown((char *)backup, (uid_t)-1, st_old.st_gid) != 0
&& fchown(bfd, (uid_t)-1, st_old.st_gid) != 0
# endif
)
mch_setperm(backup,
@@ -4023,6 +4029,29 @@ restore_backup:
}
#endif
#ifdef UNIX
/* When creating a new file, set its owner/group to that of the original
* file. Get the new device and inode number. */
if (backup != NULL && !backup_copy)
{
# ifdef HAVE_FCHOWN
struct stat st;
/* don't change the owner when it's already OK, some systems remove
* permission or ACL stuff */
if (mch_stat((char *)wfname, &st) < 0
|| st.st_uid != st_old.st_uid
|| st.st_gid != st_old.st_gid)
{
fchown(fd, st_old.st_uid, st_old.st_gid);
if (perm >= 0) /* set permission again, may have changed */
(void)mch_setperm(wfname, perm);
}
# endif
buf_setino(buf);
}
#endif
if (close(fd) != 0)
{
errmsg = (char_u *)_("E512: Close failed");
@@ -4047,27 +4076,6 @@ restore_backup:
mch_set_acl(wfname, acl);
#endif
#ifdef UNIX
/* When creating a new file, set its owner/group to that of the original
* file. Get the new device and inode number. */
if (backup != NULL && !backup_copy)
{
struct stat st;
/* don't change the owner when it's already OK, some systems remove
* permission or ACL stuff */
if (mch_stat((char *)wfname, &st) < 0
|| st.st_uid != st_old.st_uid
|| st.st_gid != st_old.st_gid)
{
chown((char *)wfname, st_old.st_uid, st_old.st_gid);
if (perm >= 0) /* set permission again, may have changed */
(void)mch_setperm(wfname, perm);
}
buf_setino(buf);
}
#endif
#if defined(FEAT_MBYTE) && defined(FEAT_EVAL)
if (wfname != fname)
@@ -4288,7 +4296,8 @@ restore_backup:
int empty_fd;
if (org == NULL
|| (empty_fd = mch_open(org, O_CREAT | O_EXTRA | O_EXCL,
|| (empty_fd = mch_open(org,
O_CREAT | O_EXTRA | O_EXCL | O_NOFOLLOW,
perm < 0 ? 0666 : (perm & 0777))) < 0)
EMSG(_("E206: patchmode: can't touch empty original file"));
else
@@ -5757,7 +5766,8 @@ vim_rename(from, to)
return -1;
/* Create the new file with same permissions as the original. */
fd_out = mch_open((char *)to, O_CREAT|O_EXCL|O_WRONLY|O_EXTRA, (int)perm);
fd_out = mch_open((char *)to,
O_CREAT|O_EXCL|O_WRONLY|O_EXTRA|O_NOFOLLOW, (int)perm);
if (fd_out == -1)
{
close(fd_in);
@@ -7273,7 +7283,7 @@ au_event_disable(what)
save_ei = vim_strsave(p_ei);
if (save_ei != NULL)
{
new_ei = vim_strnsave(p_ei, (int)STRLEN(p_ei) + 8);
new_ei = vim_strnsave(p_ei, (int)(STRLEN(p_ei) + STRLEN(what)));
if (new_ei != NULL)
{
STRCAT(new_ei, what);