| To: vim_dev@googlegroups.com |
| Subject: Patch 7.3.281 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| 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 |
| |
| |
| |
| |
| |
| *** 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; |
| |
| |
| |
| *** 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 -- Bram@Moolenaar.net -- 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 /// |