From 06a4913245b3f862e7343b37ee1fc268b4f8d6f5 Mon Sep 17 00:00:00 2001 From: Daniel Shahaf Date: Mon, 2 Jun 2014 12:57:23 +0000 Subject: users/18870: fix glob scanner insert counting check. Was causing problems with globs in paths with (Y) glob qualifier --- Src/glob.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'Src/glob.c') diff --git a/Src/glob.c b/Src/glob.c index 1420ac786..0ca63fc62 100644 --- a/Src/glob.c +++ b/Src/glob.c @@ -297,15 +297,16 @@ statfullpath(const char *s, struct stat *st, int l) char **inserts; -/* add a match to the list */ +/* add a match to the list. Return 1 if it was inserted, 0 otherwise. */ /**/ -static void +static int insert(char *s, int checked) { struct stat buf, buf2, *bp; char *news = s; int statted = 0; + int inserted = 0; queue_signals(); inserts = NULL; @@ -316,7 +317,7 @@ insert(char *s, int checked) checked = statted = 1; if (statfullpath(s, &buf, 1)) { unqueue_signals(); - return; + return inserted; } mode = buf.st_mode; if (gf_follow) { @@ -340,7 +341,7 @@ insert(char *s, int checked) if (!statted && statfullpath(s, &buf, 1)) { unqueue_signals(); - return; + return inserted; } news = dyncat(pathbuf, news); @@ -365,7 +366,7 @@ insert(char *s, int checked) /* Try next alternative, or return if there are no more */ if (!(qo = qo->or)) { unqueue_signals(); - return; + return inserted; } qn = qo; continue; @@ -375,7 +376,7 @@ insert(char *s, int checked) } else if (!checked) { if (statfullpath(s, NULL, 1)) { unqueue_signals(); - return; + return inserted; } statted = 1; news = dyncat(pathbuf, news); @@ -435,6 +436,7 @@ insert(char *s, int checked) } matchptr++; + inserted = 1; if (++matchct == matchsz) { matchbuf = (Gmatch )realloc((char *)matchbuf, sizeof(struct gmatch) * (matchsz *= 2)); @@ -445,6 +447,7 @@ insert(char *s, int checked) break; } unqueue_signals(); + return inserted; } /* Do the globbing: scanner is called recursively * @@ -525,8 +528,7 @@ scanner(Complist q, int shortcircuit) } else { if (str[l]) str = dupstrpfx(str, l); - insert(str, 0); - if (shortcircuit) + if (insert(str, 0) == 1 && shortcircuit) return 1; } } else { @@ -617,8 +619,7 @@ scanner(Complist q, int shortcircuit) subdirlen += sizeof(int); } else /* if the last filename component, just add it */ - insert(fn, 1); - if (shortcircuit) + if (insert(fn, 1) == 1 && shortcircuit) return 1; } } -- cgit 1.4.1