Patch 8.1.0211
Problem: Expanding a file name "~" results in $HOME. (Aidan Shafran)
Solution: Change "~" to "./~" before expanding. (closes #3072)
Files: src/testdir/test_expand.vim, src/ex_docmd.c, src/eval.c,
src/proto/eval.pro, src/evalfunc.c, src/if_cscope.c, src/misc1.c
*** ../vim-8.1.0210/src/testdir/test_expand.vim Sun Jan 17 18:33:03 2016
--- src/testdir/test_expand.vim Wed Jul 25 21:05:55 2018
***************
*** 39,41 ****
--- 39,49 ----
call delete('Xdir ~ dir', 'd')
call assert_false(isdirectory('Xdir ~ dir'))
endfunc
+
+ func Test_expand_tilde_filename()
+ split ~
+ call assert_equal('~', expand('%'))
+ call assert_notequal(expand('%:p'), expand('~/'))
+ call assert_match('\~', expand('%:p'))
+ bwipe!
+ endfunc
*** ../vim-8.1.0210/src/ex_docmd.c Sat Jul 7 16:41:10 2018
--- src/ex_docmd.c Wed Jul 25 21:03:33 2018
***************
*** 10654,10659 ****
--- 10654,10660 ----
int resultlen;
buf_T *buf;
int valid = VALID_HEAD + VALID_PATH; /* assume valid
result */
+ int tilde_file = FALSE;
int spec_idx;
#ifdef FEAT_MODIFY_FNAME
int skip_mod = FALSE;
***************
*** 10720,10726 ****
--- 10721,10730 ----
valid = 0; /* Must have ":p:h" to be valid */
}
else
+ {
result = curbuf->b_fname;
+ tilde_file = STRCMP(result, "~") == 0;
+ }
break;
case SPEC_HASH: /* '#' or "#99": alternate file */
***************
*** 10784,10790 ****
--- 10788,10797 ----
valid = 0; /* Must have ":p:h" to be valid */
}
else
+ {
result = buf->b_fname;
+ tilde_file = STRCMP(result, "~") == 0;
+ }
}
break;
***************
*** 10877,10883 ****
#ifdef FEAT_MODIFY_FNAME
else if (!skip_mod)
{
! valid |= modify_fname(src, usedlen, &result, &resultbuf,
&resultlen);
if (result == NULL)
{
--- 10884,10890 ----
#ifdef FEAT_MODIFY_FNAME
else if (!skip_mod)
{
! valid |= modify_fname(src, tilde_file, usedlen, &result, &resultbuf,
&resultlen);
if (result == NULL)
{
*** ../vim-8.1.0210/src/eval.c Wed Jul 25 19:49:41 2018
--- src/eval.c Wed Jul 25 21:05:06 2018
***************
*** 9690,9700 ****
*/
int
modify_fname(
! char_u *src, /* string with modifiers */
! int *usedlen, /* characters after src that are used */
! char_u **fnamep, /* file name so far */
! char_u **bufp, /* buffer for allocated file name or NULL */
! int *fnamelen) /* length of fnamep */
{
int valid = 0;
char_u *tail;
--- 9690,9701 ----
*/
int
modify_fname(
! char_u *src, // string with modifiers
! int tilde_file, // "~" is a file name, not $HOME
! int *usedlen, // characters after src that are used
! char_u **fnamep, // file name so far
! char_u **bufp, // buffer for allocated file name or NULL
! int *fnamelen) // length of fnamep
{
int valid = 0;
char_u *tail;
***************
*** 9724,9731 ****
|| (*fnamep)[1] == '\\'
# endif
|| (*fnamep)[1] == NUL)
-
#endif
)
{
*fnamep = expand_env_save(*fnamep);
--- 9725,9732 ----
|| (*fnamep)[1] == '\\'
# endif
|| (*fnamep)[1] == NUL)
#endif
+ && !(tilde_file && (*fnamep)[1] == NUL)
)
{
*fnamep = expand_env_save(*fnamep);
*** ../vim-8.1.0210/src/proto/eval.pro Tue Jun 12 22:05:10 2018
--- src/proto/eval.pro Wed Jul 25 21:03:50 2018
***************
*** 136,142 ****
int typval_compare(typval_T *typ1, typval_T *typ2, exptype_T type, int
type_is, int ic);
char_u *typval_tostring(typval_T *arg);
int var_exists(char_u *var);
! int modify_fname(char_u *src, int *usedlen, char_u **fnamep, char_u **bufp,
int *fnamelen);
char_u *do_string_sub(char_u *str, char_u *pat, char_u *sub, typval_T *expr,
char_u *flags);
void filter_map(typval_T *argvars, typval_T *rettv, int map);
/* vim: set ft=c : */
--- 136,142 ----
int typval_compare(typval_T *typ1, typval_T *typ2, exptype_T type, int
type_is, int ic);
char_u *typval_tostring(typval_T *arg);
int var_exists(char_u *var);
! int modify_fname(char_u *src, int tilde_file, int *usedlen, char_u **fnamep,
char_u **bufp, int *fnamelen);
char_u *do_string_sub(char_u *str, char_u *pat, char_u *sub, typval_T *expr,
char_u *flags);
void filter_map(typval_T *argvars, typval_T *rettv, int map);
/* vim: set ft=c : */
*** ../vim-8.1.0210/src/evalfunc.c Wed Jul 25 19:49:41 2018
--- src/evalfunc.c Wed Jul 25 21:01:17 2018
***************
*** 3801,3807 ****
else
{
len = (int)STRLEN(fname);
! (void)modify_fname(mods, &usedlen, &fname, &fbuf, &len);
}
rettv->v_type = VAR_STRING;
--- 3801,3807 ----
else
{
len = (int)STRLEN(fname);
! (void)modify_fname(mods, FALSE, &usedlen, &fname, &fbuf, &len);
}
rettv->v_type = VAR_STRING;
*** ../vim-8.1.0210/src/if_cscope.c Sun Mar 4 16:07:23 2018
--- src/if_cscope.c Wed Jul 25 21:10:45 2018
***************
*** 519,525 ****
#ifdef FEAT_MODIFY_FNAME
len = (int)STRLEN(fname);
fbuf = (char_u *)fname;
! (void)modify_fname((char_u *)":p", &usedlen,
(char_u **)&fname, &fbuf, &len);
if (fname == NULL)
goto add_err;
--- 519,525 ----
#ifdef FEAT_MODIFY_FNAME
len = (int)STRLEN(fname);
fbuf = (char_u *)fname;
! (void)modify_fname((char_u *)":p", FALSE, &usedlen,
(char_u **)&fname, &fbuf, &len);
if (fname == NULL)
goto add_err;
*** ../vim-8.1.0210/src/misc1.c Sat Jul 7 16:41:10 2018
--- src/misc1.c Wed Jul 25 21:11:10 2018
***************
*** 4908,4914 ****
char_u *fbuf = NULL;
flen = (int)STRLEN(homedir_env);
! (void)modify_fname((char_u *)":p", &usedlen,
&homedir_env, &fbuf, &flen);
flen = (int)STRLEN(homedir_env);
if (flen > 0 && vim_ispathsep(homedir_env[flen - 1]))
--- 4908,4914 ----
char_u *fbuf = NULL;
flen = (int)STRLEN(homedir_env);
! (void)modify_fname((char_u *)":p", FALSE, &usedlen,
&homedir_env, &fbuf, &flen);
flen = (int)STRLEN(homedir_env);
if (flen > 0 && vim_ispathsep(homedir_env[flen - 1]))
*** ../vim-8.1.0210/src/version.c Wed Jul 25 19:49:41 2018
--- src/version.c Wed Jul 25 21:18:08 2018
***************
*** 795,796 ****
--- 795,798 ----
{ /* Add new patch number below this line */
+ /**/
+ 211,
/**/
--
You were lucky to have a LAKE! There were a hundred and sixty of
us living in a small shoebox in the middle of the road.
/// 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
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.