Mercurial > hg > octave-lojdl > gnulib-hg
changeset 16805:e437afafc0dc
exclude: handle wildcards with FNM_NOESCAPE and with trailing \
* lib/exclude.c (unescape_pattern): Don't worry about unescaped [;
it's not possible here. Handle the case of \ at end of pattern
without dumping core.
(add_exclude): Do not unescape the pattern if FNM_NOESCAPE is used.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Sun, 29 Apr 2012 17:02:13 -0700 |
parents | b994b31c2a5d |
children | babe19575e66 |
files | ChangeLog lib/exclude.c |
diffstat | 2 files changed, 9 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2012-04-29 Paul Eggert <eggert@cs.ucla.edu> + exclude: handle wildcards with FNM_NOESCAPE and with trailing \ + * lib/exclude.c (unescape_pattern): Don't worry about unescaped [; + it's not possible here. Handle the case of \ at end of pattern + without dumping core. + (add_exclude): Do not unescape the pattern if FNM_NOESCAPE is used. + _Noreturn: future-proof non-GNU and non-MSVC compilers * build-aux/snippet/_Noreturn.h (_Noreturn): * m4/gnulib-common.m4 (gl_COMMON_BODY):
--- a/lib/exclude.c +++ b/lib/exclude.c @@ -140,20 +140,9 @@ static void unescape_pattern (char *str) { - int inset = 0; - char *q = str; + char const *q = str; do - { - if (inset) - { - if (*q == ']') - inset = 0; - } - else if (*q == '[') - inset = 1; - else if (*q == '\\') - q++; - } + q += *q == '\\' && q[1]; while ((*str++ = *q++)); } @@ -503,7 +492,7 @@ seg = new_exclude_segment (ex, exclude_hash, options); str = xstrdup (pattern); - if (options & EXCLUDE_WILDCARDS) + if ((options & (EXCLUDE_WILDCARDS | FNM_NOESCAPE)) == EXCLUDE_WILDCARDS) unescape_pattern (str); p = hash_insert (seg->v.table, str); if (p != str)