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

updated for version 7.2-076

This commit is contained in:
Bram Moolenaar
2008-12-30 15:15:57 +00:00
parent cbb8eb3480
commit 3576da72b4
2 changed files with 43 additions and 0 deletions

View File

@@ -6119,6 +6119,47 @@ vim_rename(from, to)
if (mch_stat((char *)from, &st) < 0)
return -1;
#ifdef UNIX
{
struct stat st_to;
char tempname[MAXPATHL + 1];
/* It's possible for the source and destination to be the same file.
* This happens when "from" and "to" differ in case and are on a FAT32
* filesystem. In that case go through a temp file name. */
if (mch_stat((char *)to, &st_to) >= 0
&& st.st_dev == st_to.st_dev
&& st.st_ino == st_to.st_ino)
{
/* Find a name that doesn't exist and is in the same directory.
* Move "from" to "tempname" and then to "to". */
if (STRLEN(from) >= MAXPATHL - 5)
return -1;
STRCPY(tempname, from);
for (n = 123; n < 99999; ++n)
{
sprintf(gettail(tempname), "%d", n);
if (mch_stat(tempname, &st_to) < 0)
{
if (mch_rename((char *)from, tempname) == 0)
{
if (mch_rename(tempname, (char *)to) == 0)
return 0;
/* Strange, the second step failed. Try moving the
* file back and return failure. */
mch_rename(tempname, (char *)from);
return -1;
}
/* If it fails for one temp name it will most likely fail
* for any temp name, give up. */
return -1;
}
}
return -1;
}
}
#endif
/*
* Delete the "to" file, this is required on some systems to make the
* mch_rename() work, on other systems it makes sure that we don't have

View File

@@ -676,6 +676,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
76,
/**/
75,
/**/