summaryrefslogtreecommitdiff
path: root/lib/exclude.c
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2012-04-29 17:02:13 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2012-04-29 17:02:41 -0700
commitf58a007d877819767440ee92d181fef6b0039706 (patch)
tree22bfb03c96b815f3403f49e2f22dc2617d257604 /lib/exclude.c
parent2170abddc59962473ce4441596e8a52db5385e54 (diff)
downloadgnulib-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.c17
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)