diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2012-04-29 17:02:13 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2012-04-29 17:02:41 -0700 |
commit | f58a007d877819767440ee92d181fef6b0039706 (patch) | |
tree | 22bfb03c96b815f3403f49e2f22dc2617d257604 /lib/exclude.c | |
parent | 2170abddc59962473ce4441596e8a52db5385e54 (diff) | |
download | gnulib-f58a007d877819767440ee92d181fef6b0039706.tar.gz |
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.
Diffstat (limited to 'lib/exclude.c')
-rw-r--r-- | lib/exclude.c | 17 |
1 files changed, 3 insertions, 14 deletions
diff --git a/lib/exclude.c b/lib/exclude.c index d135b09df2..5aa6a7fed8 100644 --- a/lib/exclude.c +++ b/lib/exclude.c @@ -140,20 +140,9 @@ fnmatch_pattern_has_wildcards (const char *str, int options) 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 @@ add_exclude (struct exclude *ex, char const *pattern, int options) 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) |