Mercurial > hg > octave-kai > gnulib-hg
changeset 13320:4e283fd1efe9
exclude: Unescape hashed patterns in wildcard mode.
* lib/exclude.c (add_exclude): Unescape the pattern before adding it
to the hash list.
* tests/test-exclude8.sh: New test case.
* modules/exclude-tests: Add new test.
author | Sergey Poznyakoff <gray@gnu.org.ua> |
---|---|
date | Thu, 06 May 2010 23:18:34 +0300 |
parents | 71829b55c10f |
children | 95bb4e6a23ea |
files | ChangeLog lib/exclude.c modules/exclude-tests tests/test-exclude8.sh |
diffstat | 4 files changed, 73 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2010-05-06 Sergey Poznyakoff <gray@gnu.org.ua> + + exclude: Unescape hashed patterns in wildcard mode. + * lib/exclude.c (add_exclude): Unescape the pattern before adding it + to the hash list. + * tests/test-exclude8.sh: New test case. + * modules/exclude-tests: Add new test. + 2010-05-05 Eric Blake <eblake@redhat.com> verify: automate tests
--- a/lib/exclude.c +++ b/lib/exclude.c @@ -134,6 +134,26 @@ 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 * @@ -480,6 +500,8 @@ 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);
--- a/modules/exclude-tests +++ b/modules/exclude-tests @@ -7,6 +7,7 @@ tests/test-exclude5.sh tests/test-exclude6.sh tests/test-exclude7.sh +tests/test-exclude8.sh Depends-on: progname @@ -21,7 +22,8 @@ test-exclude4.sh\ test-exclude5.sh\ test-exclude6.sh\ - test-exclude7.sh + test-exclude7.sh\ + test-exclude8.sh check_PROGRAMS += test-exclude test_exclude_LDADD = $(LDADD) @LIBINTL@
new file mode 100755 --- /dev/null +++ b/tests/test-exclude8.sh @@ -0,0 +1,40 @@ +#! /bin/sh +# Test suite for exclude. +# Copyright (C) 2010 Free Software Foundation, Inc. +# This file is part of the GNUlib Library. +# +# 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 +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +TMP=excltmp.$$ +LIST=flist.$$ +ERR=0 + +# Test escaped metacharacters. + +cat > $LIST <<'EOT' +f\*e +b[a\*]r +EOT + +cat > $TMP <<'EOT' +f*e: 1 +file: 0 +bar: 1 +EOT + +./test-exclude$EXEEXT -wildcards $LIST -- 'f*e' 'file' 'bar' | + tr -d '\015' | diff -c $TMP - || ERR=1 + +rm -f $TMP $LIST +exit $ERR