]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.281 v7.3.281
authorBram Moolenaar <Bram@vim.org>
Wed, 17 Aug 2011 13:23:23 +0000 (15:23 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 17 Aug 2011 13:23:23 +0000 (15:23 +0200)
Problem:    After using "expand('%:8')" the buffer name is changed.
Solution:   Make a copy of the file name before shortening it.

src/eval.c
src/version.c

index 22779e3b16746addf76b71fba66a13f1564c808c..e9ab0359a8832c417cd634a27e14404a510cf443 100644 (file)
@@ -23205,6 +23205,7 @@ modify_fname(src, usedlen, fnamep, bufp, fnamelen)
     int                c;
     int                has_fullname = 0;
 #ifdef WIN3264
+    char_u     *fname_start = *fnamep;
     int                has_shortname = 0;
 #endif
 
@@ -23379,24 +23380,25 @@ repeat:
     }
 
 #ifdef WIN3264
-    /* Check shortname after we have done 'heads' and before we do 'tails'
+    /*
+     * Handle ":8" after we have done 'heads' and before we do 'tails'.
      */
     if (has_shortname)
     {
-       pbuf = NULL;
-       /* Copy the string if it is shortened by :h */
-       if (*fnamelen < (int)STRLEN(*fnamep))
+       /* Copy the string if it is shortened by :h and when it wasn't copied
+        * yet, because we are going to change it in place.  Avoids changing
+        * the buffer name for "%:8". */
+       if (*fnamelen < (int)STRLEN(*fnamep) || *fnamep == fname_start)
        {
            p = vim_strnsave(*fnamep, *fnamelen);
-           if (p == 0)
+           if (p == NULL)
                return -1;
            vim_free(*bufp);
            *bufp = *fnamep = p;
        }
 
        /* Split into two implementations - makes it easier.  First is where
-        * there isn't a full name already, second is where there is.
-        */
+        * there isn't a full name already, second is where there is. */
        if (!has_fullname && !vim_isAbsName(*fnamep))
        {
            if (shortpath_for_partial(fnamep, bufp, fnamelen) == FAIL)
@@ -23404,18 +23406,16 @@ repeat:
        }
        else
        {
-           int         l;
+           int         l = *fnamelen;
 
-           /* Simple case, already have the full-name
+           /* Simple case, already have the full-name.
             * Nearly always shorter, so try first time. */
-           l = *fnamelen;
            if (get_short_pathname(fnamep, bufp, &l) == FAIL)
                return -1;
 
            if (l == 0)
            {
-               /* Couldn't find the filename.. search the paths.
-                */
+               /* Couldn't find the filename, search the paths. */
                l = *fnamelen;
                if (shortpath_for_invalid_fname(fnamep, bufp, &l) == FAIL)
                    return -1;
index 133037690c9279bfe0a4cb0c1ad2bf20766119f8..35a5479d6ae2d4dd8e05589474b789678986439a 100644 (file)
@@ -709,6 +709,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    281,
 /**/
     280,
 /**/