projects
/
gnulib.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
mbsrtowcs: Work around bug on native Windows.
[gnulib.git]
/
lib
/
exclude.c
diff --git
a/lib/exclude.c
b/lib/exclude.c
index
34b5636
..
df49714
100644
(file)
--- a/
lib/exclude.c
+++ b/
lib/exclude.c
@@
-1,7
+1,7
@@
/* exclude.c -- exclude file names
/* exclude.c -- exclude file names
- Copyright (C) 1992
, 1993, 1994, 1997, 1999, 2000, 2001, 2002, 2003, 2004,
-
2005, 2006, 2007, 2009, 2010 Free Software
Foundation, Inc.
+ Copyright (C) 1992
-1994, 1997, 1999-2007, 2009-2011 Free Software
+ Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@
-134,6
+134,26
@@
fnmatch_pattern_has_wildcards (const char *str, int options)
return false;
}
return false;
}
+static void
+unescape_pattern (char *str)
+{
+ int inset = 0;
+ char *q = str;
+ do
+ {
+ if (inset)
+ {
+ if (*q == ']')
+ inset = 0;
+ }
+ else if (*q == '[')
+ inset = 1;
+ else if (*q == '\\')
+ q++;
+ }
+ while ((*str++ = *q++));
+}
+
/* Return a newly allocated and empty exclude list. */
struct exclude *
/* Return a newly allocated and empty exclude list. */
struct exclude *
@@
-480,6
+500,8
@@
add_exclude (struct exclude *ex, char const *pattern, int options)
seg = new_exclude_segment (ex, exclude_hash, options);
str = xstrdup (pattern);
seg = new_exclude_segment (ex, exclude_hash, options);
str = xstrdup (pattern);
+ if (options & EXCLUDE_WILDCARDS)
+ unescape_pattern (str);
p = hash_insert (seg->v.table, str);
if (p != str)
free (str);
p = hash_insert (seg->v.table, str);
if (p != str)
free (str);