From owner-svn-src-all@freebsd.org Tue Jul 19 00:25:29 2016 Return-Path: Delivered-To: svn-src-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2691EB9DC3F; Tue, 19 Jul 2016 00:25:29 +0000 (UTC) (envelope-from ache@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id D1CB11E6A; Tue, 19 Jul 2016 00:25:28 +0000 (UTC) (envelope-from ache@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u6J0PSso001259; Tue, 19 Jul 2016 00:25:28 GMT (envelope-from ache@FreeBSD.org) Received: (from ache@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u6J0PSnQ001258; Tue, 19 Jul 2016 00:25:28 GMT (envelope-from ache@FreeBSD.org) Message-Id: <201607190025.u6J0PSnQ001258@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ache set sender to ache@FreeBSD.org using -f From: "Andrey A. Chernov" Date: Tue, 19 Jul 2016 00:25:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r303014 - head/lib/libc/gen X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 19 Jul 2016 00:25:29 -0000 Author: ache Date: Tue Jul 19 00:25:27 2016 New Revision: 303014 URL: https://svnweb.freebsd.org/changeset/base/303014 Log: 1) Don't protect \/ and \. even if user say so. They are not special chars in any case and needed for further processing. For ~ expansion too. 2) Don't terminate *pathend with / when GLOB_LIMIT_STAT is reached, it will be not visible outside in any case since error is returned. 3) Cosmetic: change if expression to better reflect its semantic. Modified: head/lib/libc/gen/glob.c Modified: head/lib/libc/gen/glob.c ============================================================================== --- head/lib/libc/gen/glob.c Mon Jul 18 20:24:13 2016 (r303013) +++ head/lib/libc/gen/glob.c Tue Jul 19 00:25:27 2016 (r303014) @@ -244,7 +244,8 @@ glob(const char * __restrict pattern, in return (GLOB_NOMATCH); else if (clen == 0) break; - *bufnext++ = wc | prot; + *bufnext++ = wc | ((wc != DOT && wc != SEP) ? + prot : 0); patnext += clen; } } @@ -478,8 +479,8 @@ globtilde(const Char *pattern, Char *pat return (NULL); dc = wbuf; - for (b = patbuf; b < eb && *dc != EOS; *b++ = *dc++ | M_PROTECT) - continue; + for (b = patbuf; b < eb && *dc != EOS; b++, dc++) + *b = *dc | ((*dc != DOT && *dc != SEP) ? M_PROTECT : 0); if (*dc != EOS) return (NULL); @@ -642,10 +643,6 @@ glob2(Char *pathbuf, Char *pathend, Char if ((pglob->gl_flags & GLOB_LIMIT) && limit->l_stat_cnt++ >= GLOB_LIMIT_STAT) { errno = 0; - if (pathend + 1 > pathend_last) - return (GLOB_NOSPACE); - *pathend++ = SEP; - *pathend = EOS; return (GLOB_NOSPACE); } if (((pglob->gl_flags & GLOB_MARK) && @@ -886,7 +883,7 @@ match(Char *name, Char *pat, Char *paten ok = 0; if ((k = *name++) == EOS) return (0); - if ((negate_range = ((*pat & M_MASK) == M_NOT)) != EOS) + if ((negate_range = ((*pat & M_MASK) == M_NOT)) != 0) ++pat; while (((c = *pat++) & M_MASK) != M_END) if ((*pat & M_MASK) == M_RNG) {