]> git.pld-linux.org Git - packages/vim.git/blob - 7.2.076
- updated to 7.2.102
[packages/vim.git] / 7.2.076
1 To: vim-dev@vim.org
2 Subject: Patch 7.2.076
3 Fcc: outbox
4 From: Bram Moolenaar <Bram@moolenaar.net>
5 Mime-Version: 1.0
6 Content-Type: text/plain; charset=ISO-8859-1
7 Content-Transfer-Encoding: 8bit
8 ------------
9
10 Patch 7.2.076
11 Problem:    rename(from, to) deletes the file if "from" and "to" are not equal
12             but still refer to the same file.  E.g., on a FAT32 filesystem
13             under Unix.
14 Solution:   Go through another file name.
15 Files:      src/fileio.c
16
17
18 *** ../vim-7.2.075/src/fileio.c Fri Nov 28 21:26:50 2008
19 --- src/fileio.c        Tue Dec 30 16:04:44 2008
20 ***************
21 *** 6119,6124 ****
22 --- 6119,6165 ----
23       if (mch_stat((char *)from, &st) < 0)
24         return -1;
25   
26 + #ifdef UNIX
27 +     {
28 +       struct stat     st_to;
29 +       char            tempname[MAXPATHL + 1];
30
31 +       /* It's possible for the source and destination to be the same file.
32 +        * This happens when "from" and "to" differ in case and are on a FAT32
33 +        * filesystem.  In that case go through a temp file name. */
34 +       if (mch_stat((char *)to, &st_to) >= 0
35 +               && st.st_dev == st_to.st_dev
36 +               && st.st_ino == st_to.st_ino)
37 +       {
38 +           /* Find a name that doesn't exist and is in the same directory.
39 +            * Move "from" to "tempname" and then to "to". */
40 +           if (STRLEN(from) >= MAXPATHL - 5)
41 +               return -1;
42 +           STRCPY(tempname, from);
43 +           for (n = 123; n < 99999; ++n)
44 +           {
45 +               sprintf(gettail(tempname), "%d", n);
46 +               if (mch_stat(tempname, &st_to) < 0)
47 +               {
48 +                   if (mch_rename((char *)from, tempname) == 0)
49 +                   {
50 +                       if (mch_rename(tempname, (char *)to) == 0)
51 +                           return 0;
52 +                       /* Strange, the second step failed.  Try moving the
53 +                        * file back and return failure. */
54 +                       mch_rename(tempname, (char *)from);
55 +                       return -1;
56 +                   }
57 +                   /* If it fails for one temp name it will most likely fail
58 +                    * for any temp name, give up. */
59 +                   return -1;
60 +               }
61 +           }
62 +           return -1;
63 +       }
64 +     }
65 + #endif
66
67       /*
68        * Delete the "to" file, this is required on some systems to make the
69        * mch_rename() work, on other systems it makes sure that we don't have
70 *** ../vim-7.2.075/src/version.c        Wed Dec 24 14:24:41 2008
71 --- src/version.c       Tue Dec 30 16:09:51 2008
72 ***************
73 *** 678,679 ****
74 --- 678,681 ----
75   {   /* Add new patch number below this line */
76 + /**/
77 +     76,
78   /**/
79
80 -- 
81 FATAL ERROR! SYSTEM HALTED! - Press any key to continue doing nothing.
82
83  /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
84 ///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
85 \\\        download, build and distribute -- http://www.A-A-P.org        ///
86  \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
This page took 0.046773 seconds and 3 git commands to generate.