Patch 7.3.281
Problem:    After using "expand('%:8')" the buffer name is changed.
Solution:   Make a copy of the file name before shortening it.
Files:      src/eval.c


*** ../vim-7.3.280/src/eval.c   2011-08-10 12:38:02.000000000 +0200
--- src/eval.c  2011-08-17 15:12:39.000000000 +0200
***************
*** 23205,23210 ****
--- 23205,23211 ----
      int               c;
      int               has_fullname = 0;
  #ifdef WIN3264
+     char_u    *fname_start = *fnamep;
      int               has_shortname = 0;
  #endif
  
***************
*** 23379,23402 ****
      }
  
  #ifdef WIN3264
!     /* Check shortname 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))
        {
            p = vim_strnsave(*fnamep, *fnamelen);
!           if (p == 0)
                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.
!        */
        if (!has_fullname && !vim_isAbsName(*fnamep))
        {
            if (shortpath_for_partial(fnamep, bufp, fnamelen) == FAIL)
--- 23380,23404 ----
      }
  
  #ifdef WIN3264
!     /*
!      * Handle ":8" after we have done 'heads' and before we do 'tails'.
       */
      if (has_shortname)
      {
!       /* 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 == 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. */
        if (!has_fullname && !vim_isAbsName(*fnamep))
        {
            if (shortpath_for_partial(fnamep, bufp, fnamelen) == FAIL)
***************
*** 23404,23421 ****
        }
        else
        {
!           int         l;
  
!           /* 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.
!                */
                l = *fnamelen;
                if (shortpath_for_invalid_fname(fnamep, bufp, &l) == FAIL)
                    return -1;
--- 23406,23421 ----
        }
        else
        {
!           int         l = *fnamelen;
  
!           /* Simple case, already have the full-name.
             * Nearly always shorter, so try first time. */
            if (get_short_pathname(fnamep, bufp, &l) == FAIL)
                return -1;
  
            if (l == 0)
            {
!               /* Couldn't find the filename, search the paths. */
                l = *fnamelen;
                if (shortpath_for_invalid_fname(fnamep, bufp, &l) == FAIL)
                    return -1;
*** ../vim-7.3.280/src/version.c        2011-08-10 18:36:49.000000000 +0200
--- src/version.c       2011-08-17 15:21:41.000000000 +0200
***************
*** 711,712 ****
--- 711,714 ----
  {   /* Add new patch number below this line */
+ /**/
+     281,
  /**/

-- 
Kisses may last for as much as, but no more than, five minutes.
                [real standing law in Iowa, United States of America]

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

Raspunde prin e-mail lui