From 78dd672e1a8550f93ccd586b6a9ad35369c796f7 Mon Sep 17 00:00:00 2001 From: Mikael Magnusson Date: Thu, 31 May 2012 21:08:31 +0200 Subject: 33136: P glob qual appends words when negated --- Src/glob.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'Src/glob.c') diff --git a/Src/glob.c b/Src/glob.c index cb853870a..c24bfec93 100644 --- a/Src/glob.c +++ b/Src/glob.c @@ -178,7 +178,7 @@ struct globdata { int gd_gf_numsort; int gd_gf_follow, gd_gf_sorts, gd_gf_nsorts; struct globsort gd_gf_sortlist[MAX_SORTS]; - LinkList gd_gf_pre_words; + LinkList gd_gf_pre_words, gd_gf_post_words; char *gd_glob_pre, *gd_glob_suf; }; @@ -210,6 +210,7 @@ static struct globdata curglobdata; #define gf_nsorts (curglobdata.gd_gf_nsorts) #define gf_sortlist (curglobdata.gd_gf_sortlist) #define gf_pre_words (curglobdata.gd_gf_pre_words) +#define gf_post_words (curglobdata.gd_gf_post_words) /* and macros for save/restore */ @@ -1074,7 +1075,14 @@ insert_glob_match(LinkList list, LinkNode next, char *data) } } - insertlinknode(list, next, data); + next = insertlinknode(list, next, data); + + if (gf_post_words) { + LinkNode added; + for (added = firstnode(gf_post_words); added; incnode(added)) { + next = insertlinknode(list, next, dupstring(getdata(added))); + } + } } /* @@ -1190,7 +1198,7 @@ zglob(LinkList list, LinkNode np, int nountok) gf_noglobdots = unset(GLOBDOTS); gf_numsort = isset(NUMERICGLOBSORT); gf_sorts = gf_nsorts = 0; - gf_pre_words = NULL; + gf_pre_words = gf_post_words = NULL; /* Check for qualifiers */ while (!nobareglob || @@ -1679,9 +1687,10 @@ zglob(LinkList list, LinkNode np, int nountok) if (tt != NULL) { - if (!gf_pre_words) - gf_pre_words = newlinklist(); - addlinknode(gf_pre_words, tt); + LinkList *words = sense & 1 ? &gf_post_words : &gf_pre_words; + if (!*words) + *words = newlinklist(); + addlinknode(*words, tt); } break; } -- cgit v1.2.3 From 691a7e4b3d106bbc899bacbce20d1be9865b6598 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Thu, 25 Sep 2014 19:12:34 +0100 Subject: users/19143: fix depth glob search with trailing slashes --- ChangeLog | 5 +++++ Src/glob.c | 3 +++ 2 files changed, 8 insertions(+) (limited to 'Src/glob.c') diff --git a/ChangeLog b/ChangeLog index f63bb8a12..a3e72e3e8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2014-09-25 Peter Stephenson + + * users/19143: Src/glob.c: **/*(odonT) didn't work because + the trailing slash wasn't properly ignored. + 2014-09-25 Peter Stephenson * unposted: NEWS: tweak last change. diff --git a/Src/glob.c b/Src/glob.c index c24bfec93..ca7bc4410 100644 --- a/Src/glob.c +++ b/Src/glob.c @@ -900,6 +900,9 @@ gmatchcmp(Gmatch a, Gmatch b) /* Count slashes. Trailing slashes don't count. */ while (*aptr && *aptr == *bptr) aptr++, bptr++; + /* Like I just said... */ + if ((!*aptr || !*bptr) && aptr > a->name && aptr[-1] == '/') + aptr--, bptr--; if (*aptr) for (; aptr[1]; aptr++) if (*aptr == '/') { -- cgit v1.2.3