Hi!

I have fetched the newest version from CVS and get the following errors:

ex_getln.c: In function `ExpandEscape':
ex_getln.c:3659: error: structure has no member named `xp_shell'
ex_getln.c: In function `vim_strsave_fnameescape':
ex_getln.c:3712: error: `p' undeclared (first use in this function)
ex_getln.c:3712: error: (Each undeclared identifier is reported only once
ex_getln.c:3712: error: for each function it appears in.)

version.c shows, that it's version 301. The errors occur both with MSVC 
and MinGW on Windows (latest versions). My call of Make is

mingw32-make -f Make_ming.mak gvim.exe FEATURES=HUGE GUI=yes OLE=yes 
DEBUG=no ARCH=i686

I use the equivalent options when I build Vim with MSVC.

Best wishes,
Georg Dahn



Bram Moolenaar wrote:
> 
> Patch 7.1.299
> Problem:    Filetype detection doesn't work properly for file names ending in
>           a part that is ignored and contain a space or other special
>           characters.
> Solution:   Escape the special characters using the new fnameescape function.
> Files:            runtime/doc/eval.txt, runtime/filetype.vim, src/eval.c,
>           src/ex_getln.c, src/proto/ex_getln.pro, src/vim.h
> 
> 
> *** ../vim-7.1.298/runtime/doc/eval.txt       Wed Feb 20 20:09:44 2008
> --- runtime/doc/eval.txt      Wed May 28 16:42:42 2008
> ***************
> *** 1,4 ****
> ! *eval.txt*      For Vim version 7.1.  Last change: 2008 Feb 20
>   
>   
>                 VIM REFERENCE MANUAL    by Bram Moolenaar
> --- 1,4 ----
> ! *eval.txt*      For Vim version 7.1.  Last change: 2008 May 28
>   
>   
>                 VIM REFERENCE MANUAL    by Bram Moolenaar
> ***************
> *** 1609,1614 ****
> --- 1652,1658 ----
>                               String  find directory {name} in {path}
>   findfile( {name}[, {path}[, {count}]])
>                               String  find file {name} in {path}
> + fnameescape( {fname})               String  escape special characters in 
> {fname}
>   fnamemodify( {fname}, {mods})       String  modify file name
>   foldclosed( {lnum})         Number  first line of fold at {lnum} if closed
>   foldclosedend( {lnum})              Number  last line of fold at {lnum} if 
> closed
> ***************
> *** 2620,2625 ****
> --- 2669,2687 ----
>   <           Searches from the directory of the current file upwards until
>               it finds the file "tags.vim".
>   
> + fnameescape({string})                                       *fnameescape()*
> +             Escape {string} for use as file name command argument.  All
> +             characters that have a special meaning, such as '%' and '|'
> +             are escaped with a backslash.
> +             For most systems the characters escaped are "".  For systems
> +             where a backslash appears in a filename, it depends on the
> +             value of 'isfname'.
> +             Example: >
> +                     :let fname = 'some str%nge|name'
> +                     :exe "edit " . fnameescape(fname)
> + <           results in executing: >
> +                     edit some\ str\%nge\|name
> + 
>   fnamemodify({fname}, {mods})                                *fnamemodify()*
>               Modify file name {fname} according to {mods}.  {mods} is a
>               string of characters like it is used for file names on the
> *** ../vim-7.1.298/runtime/filetype.vim       Tue May 15 09:14:33 2007
> --- runtime/filetype.vim      Wed May 28 16:39:09 2008
> ***************
> *** 16,35 ****
>   augroup filetypedetect
>   
>   " Ignored extensions
>   au BufNewFile,BufRead 
> ?\+.orig,?\+.bak,?\+.old,?\+.new,?\+.rpmsave,?\+.rpmnew
> !     \ exe "doau filetypedetect BufRead " . expand("<afile>:r")
>   au BufNewFile,BufRead *~
>       \ let s:name = expand("<afile>") |
>       \ let s:short = substitute(s:name, '\~$', '', '') |
>       \ if s:name != s:short && s:short != "" |
> !     \   exe "doau filetypedetect BufRead " . s:short |
>       \ endif |
> !     \ unlet s:name |
> !     \ unlet s:short
>   au BufNewFile,BufRead ?\+.in
>       \ if expand("<afile>:t") != "configure.in" |
> !     \   exe "doau filetypedetect BufRead " . expand("<afile>:r") |
>       \ endif
>   
>   " Pattern used to match file names which should not be inspected.
>   " Currently finds compressed files.
> --- 16,38 ----
>   augroup filetypedetect
>   
>   " Ignored extensions
> + if exists("*fnameescape")
>   au BufNewFile,BufRead 
> ?\+.orig,?\+.bak,?\+.old,?\+.new,?\+.rpmsave,?\+.rpmnew
> !     \ exe "doau filetypedetect BufRead " . fnameescape(expand("<afile>:r"))
>   au BufNewFile,BufRead *~
>       \ let s:name = expand("<afile>") |
>       \ let s:short = substitute(s:name, '\~$', '', '') |
>       \ if s:name != s:short && s:short != "" |
> !     \   exe "doau filetypedetect BufRead " . fnameescape(s:short) |
>       \ endif |
> !     \ unlet s:name s:short
>   au BufNewFile,BufRead ?\+.in
>       \ if expand("<afile>:t") != "configure.in" |
> !     \   exe "doau filetypedetect BufRead " . 
> fnameescape(expand("<afile>:r")) |
>       \ endif
> + elseif &verbose > 0
> +   echomsg "Warning: some filetypes will not be recognized because this 
> version of Vim does not have fnameescape()"
> + endif
>   
>   " Pattern used to match file names which should not be inspected.
>   " Currently finds compressed files.
> *** ../vim-7.1.298/src/eval.c Tue Apr  1 13:10:45 2008
> --- src/eval.c        Wed May 28 16:35:51 2008
> ***************
> *** 507,512 ****
> --- 516,522 ----
>   static void f_filter __ARGS((typval_T *argvars, typval_T *rettv));
>   static void f_finddir __ARGS((typval_T *argvars, typval_T *rettv));
>   static void f_findfile __ARGS((typval_T *argvars, typval_T *rettv));
> + static void f_fnameescape __ARGS((typval_T *argvars, typval_T *rettv));
>   static void f_fnamemodify __ARGS((typval_T *argvars, typval_T *rettv));
>   static void f_foldclosed __ARGS((typval_T *argvars, typval_T *rettv));
>   static void f_foldclosedend __ARGS((typval_T *argvars, typval_T *rettv));
> ***************
> *** 7107,7112 ****
> --- 7437,7443 ----
>       {"filter",              2, 2, f_filter},
>       {"finddir",             1, 3, f_finddir},
>       {"findfile",    1, 3, f_findfile},
> +     {"fnameescape", 1, 1, f_fnameescape},
>       {"fnamemodify", 2, 2, f_fnamemodify},
>       {"foldclosed",  1, 1, f_foldclosed},
>       {"foldclosedend",       1, 1, f_foldclosedend},
> ***************
> *** 9465,9470 ****
> --- 9804,9822 ----
>   }
>   
>   /*
> +  * "fnameescape({string})" function
> +  */
> +     static void
> + f_fnameescape(argvars, rettv)
> +     typval_T        *argvars;
> +     typval_T        *rettv;
> + {
> +     rettv->vval.v_string = vim_strsave_fnameescape(
> +                                        get_tv_string(&argvars[0]), FALSE);
> +     rettv->v_type = VAR_STRING;
> + }
> + 
> + /*
>    * "fnamemodify({fname}, {mods})" function
>    */
>       static void
> *** ../vim-7.1.298/src/ex_getln.c     Tue Jan 22 12:44:03 2008
> --- src/ex_getln.c    Mon May 26 22:14:51 2008
> ***************
> *** 3656,3677 ****
>   #endif
>                   }
>               }
> ! #ifdef BACKSLASH_IN_FILENAME
> !             {
> !                 char_u      buf[20];
> !                 int         j = 0;
> ! 
> !                 /* Don't escape '[' and '{' if they are in 'isfname'. */
> !                 for (p = PATH_ESC_CHARS; *p != NUL; ++p)
> !                     if ((*p != '[' && *p != '{') || !vim_isfilec(*p))
> !                         buf[j++] = *p;
> !                 buf[j] = NUL;
> !                 p = vim_strsave_escaped(files[i], buf);
> !             }
> ! #else
> !             p = vim_strsave_escaped(files[i],
> !                          xp->xp_shell ? SHELL_ESC_CHARS : PATH_ESC_CHARS);
> ! #endif
>               if (p != NULL)
>               {
>                   vim_free(files[i]);
> --- 3656,3662 ----
>   #endif
>                   }
>               }
> !             p = vim_strsave_fnameescape(files[i], xp->xp_shell);
>               if (p != NULL)
>               {
>                   vim_free(files[i]);
> ***************
> *** 3710,3715 ****
> --- 3695,3725 ----
>   }
>   
>   /*
> +  * Escape special characters in "fname" for when used as a file name 
> argument
> +  * after a Vim command, or, when "shell" is non-zero, a shell command.
> +  * Returns the result in allocated memory.
> +  */
> +     char_u *
> + vim_strsave_fnameescape(fname, shell)
> +     char_u *fname;
> +     int    shell;
> + {
> + #ifdef BACKSLASH_IN_FILENAME
> +     char_u  buf[20];
> +     int             j = 0;
> + 
> +     /* Don't escape '[' and '{' if they are in 'isfname'. */
> +     for (p = PATH_ESC_CHARS; *p != NUL; ++p)
> +     if ((*p != '[' && *p != '{') || !vim_isfilec(*p))
> +         buf[j++] = *p;
> +     buf[j] = NUL;
> +     return vim_strsave_escaped(fname, buf);
> + #else
> +     return vim_strsave_escaped(fname, shell ? SHELL_ESC_CHARS : 
> PATH_ESC_CHARS);
> + #endif
> + }
> + 
> + /*
>    * Put a backslash before the file name in "pp", which is in allocated 
> memory.
>    */
>       static void
> *** ../vim-7.1.298/src/proto/ex_getln.pro     Sat May  5 19:24:48 2007
> --- src/proto/ex_getln.pro    Mon May 26 22:14:41 2008
> ***************
> *** 24,29 ****
> --- 24,30 ----
>   void ExpandInit __ARGS((expand_T *xp));
>   void ExpandCleanup __ARGS((expand_T *xp));
>   void ExpandEscape __ARGS((expand_T *xp, char_u *str, int numfiles, char_u 
> **files, int options));
> + char_u *vim_strsave_fnameescape __ARGS((char_u *fname, int shell));
>   void tilde_replace __ARGS((char_u *orig_pat, int num_files, char_u 
> **files));
>   char_u *sm_gettail __ARGS((char_u *s));
>   char_u *addstar __ARGS((char_u *fname, int len, int context));
> *** ../vim-7.1.298/src/vim.h  Sun Mar 16 16:02:47 2008
> --- src/vim.h Wed May 28 16:37:50 2008
> ***************
> *** 336,345 ****
>   # endif
>   #endif
>   #ifdef BACKSLASH_IN_FILENAME
> ! # define PATH_ESC_CHARS ((char_u *)" \t*?[{`%#")
>   #else
> ! # define PATH_ESC_CHARS ((char_u *)" \t*?[{`$\\%#'\"|")
> ! # define SHELL_ESC_CHARS ((char_u *)" \t*?[{`$\\%#'\"|<>();&!")
>   #endif
>   
>   #define NUMBUFLEN 30            /* length of a buffer to store a number in 
> ASCII */
> --- 336,345 ----
>   # endif
>   #endif
>   #ifdef BACKSLASH_IN_FILENAME
> ! # define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`%#'\"|!<")
>   #else
> ! # define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<")
> ! # define SHELL_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<>();&")
>   #endif
>   
>   #define NUMBUFLEN 30            /* length of a buffer to store a number in 
> ASCII */
> *** ../vim-7.1.298/src/version.c      Sat May 10 21:37:56 2008
> --- src/version.c     Wed May 28 16:40:11 2008
> ***************
> *** 668,669 ****
> --- 673,676 ----
>   {   /* Add new patch number below this line */
> + /**/
> +     299,
>   /**/
> 

--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

Raspunde prin e-mail lui