From owner-svn-src-head@FreeBSD.ORG Sun Aug 22 21:18:21 2010 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AA64C10656AC; Sun, 22 Aug 2010 21:18:21 +0000 (UTC) (envelope-from jilles@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 8E66B8FC14; Sun, 22 Aug 2010 21:18:21 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o7MLILS1016021; Sun, 22 Aug 2010 21:18:21 GMT (envelope-from jilles@svn.freebsd.org) Received: (from jilles@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o7MLILb4016018; Sun, 22 Aug 2010 21:18:21 GMT (envelope-from jilles@svn.freebsd.org) Message-Id: <201008222118.o7MLILb4016018@svn.freebsd.org> From: Jilles Tjoelker Date: Sun, 22 Aug 2010 21:18:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r211646 - in head: bin/sh tools/regression/bin/sh/expansion X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 22 Aug 2010 21:18:21 -0000 Author: jilles Date: Sun Aug 22 21:18:21 2010 New Revision: 211646 URL: http://svn.freebsd.org/changeset/base/211646 Log: sh: Remove remnants of '!!' to negate pattern. This Almquist extension was disabled long ago. In pathname generation, components starting with '!!' were treated as containing wildcards, causing unnecessary readdir (which could fail, causing pathname generation to fail while it should not). Added: head/tools/regression/bin/sh/expansion/pathname4.0 (contents, props changed) Modified: head/bin/sh/expand.c Modified: head/bin/sh/expand.c ============================================================================== --- head/bin/sh/expand.c Sun Aug 22 21:06:18 2010 (r211645) +++ head/bin/sh/expand.c Sun Aug 22 21:18:21 2010 (r211646) @@ -109,7 +109,6 @@ STATIC void expmeta(char *, char *); STATIC void addfname(char *); STATIC struct strlist *expsort(struct strlist *); STATIC struct strlist *msort(struct strlist *, int); -STATIC int pmatch(const char *, const char *, int); STATIC char *cvtnum(int, char *); STATIC int collate_range_cmp(int, int); @@ -1101,7 +1100,7 @@ expandmeta(struct strlist *str, int flag for (;;) { /* fast check for meta chars */ if ((c = *p++) == '\0') goto nometa; - if (c == '*' || c == '?' || c == '[' || c == '!') + if (c == '*' || c == '?' || c == '[') break; } savelastp = exparg.lastp; @@ -1168,8 +1167,6 @@ expmeta(char *enddir, char *name) break; } } - } else if (*p == '!' && p[1] == '!' && (p == name || p[-1] == '/')) { - metaflag = 1; } else if (*p == '\0') break; else if (*p == CTLQUOTEMARK) @@ -1353,18 +1350,6 @@ msort(struct strlist *list, int len) int patmatch(const char *pattern, const char *string, int squoted) { -#ifdef notdef - if (pattern[0] == '!' && pattern[1] == '!') - return 1 - pmatch(pattern + 2, string); - else -#endif - return pmatch(pattern, string, squoted); -} - - -STATIC int -pmatch(const char *pattern, const char *string, int squoted) -{ const char *p, *q; char c; @@ -1406,7 +1391,7 @@ pmatch(const char *pattern, const char * } } do { - if (pmatch(p, q, squoted)) + if (patmatch(p, q, squoted)) return 1; if (squoted && *q == CTLESC) q++; Added: head/tools/regression/bin/sh/expansion/pathname4.0 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/tools/regression/bin/sh/expansion/pathname4.0 Sun Aug 22 21:18:21 2010 (r211646) @@ -0,0 +1,28 @@ +# $FreeBSD$ + +failures=0 + +check() { + testcase=$1 + expect=$2 + eval "set -- $testcase" + actual="$*" + if [ "$actual" != "$expect" ]; then + failures=$((failures+1)) + printf '%s\n' "For $testcase, expected $expect actual $actual" + fi +} + +set -e +T=$(mktemp -d ${TMPDIR:-/tmp}/sh-test.XXXXXX) +trap 'rm -rf $T' 0 +cd -P $T + +mkdir !!a +touch !!a/fff + +chmod u-r . +check '!!a/ff*' '!!a/fff' +chmod u+r . + +exit $((failures != 0))