summaryrefslogtreecommitdiff
path: root/Src
diff options
context:
space:
mode:
authorBart Schaefer <schaefer@ipost.com>2021-04-10 14:26:46 -0700
committerBart Schaefer <schaefer@ipost.com>2021-04-10 14:26:46 -0700
commit408a83048366a22bf7645b71bee7428743793736 (patch)
tree993f2e154dda94aa953c74450870eee9adc9968b /Src
parent1bec15a0105c7884c1a6d1243087ebcc801a5937 (diff)
downloadzsh-408a83048366a22bf7645b71bee7428743793736.tar.gz
zsh-408a83048366a22bf7645b71bee7428743793736.zip
47913: implement CASE_PATHS option to make NO_CASE_GLOB more sensible
Diffstat (limited to 'Src')
-rw-r--r--Src/options.c1
-rw-r--r--Src/pattern.c9
-rw-r--r--Src/zsh.h1
3 files changed, 10 insertions, 1 deletions
diff --git a/Src/options.c b/Src/options.c
index fba021e7d..6ea6290e5 100644
--- a/Src/options.c
+++ b/Src/options.c
@@ -105,6 +105,7 @@ static struct optname optns[] = {
{{NULL, "bsdecho", OPT_EMULATE|OPT_SH}, BSDECHO},
{{NULL, "caseglob", OPT_ALL}, CASEGLOB},
{{NULL, "casematch", OPT_ALL}, CASEMATCH},
+{{NULL, "casepaths", 0}, CASEPATHS},
{{NULL, "cbases", 0}, CBASES},
{{NULL, "cprecedences", OPT_EMULATE|OPT_NONZSH}, CPRECEDENCES},
{{NULL, "cdablevars", OPT_EMULATE}, CDABLEVARS},
diff --git a/Src/pattern.c b/Src/pattern.c
index c28f2c9fb..c0e31b78e 100644
--- a/Src/pattern.c
+++ b/Src/pattern.c
@@ -509,7 +509,7 @@ void
patcompstart(void)
{
patcompcharsset();
- if (isset(CASEGLOB))
+ if (isset(CASEGLOB) || isset(CASEPATHS))
patglobflags = 0;
else
patglobflags = GF_IGNCASE;
@@ -632,6 +632,13 @@ patcompile(char *exp, int inflags, char **endexp)
p->patmlen = len;
p->patnpar = patnpar-1;
+#ifndef __CYGWIN__ /* The filesystem itself is case-insensitive on Cygwin */
+ if ((patflags & PAT_FILE) && !isset(CASEGLOB) && !(patflags & PAT_PURES)) {
+ p->globflags |= GF_IGNCASE;
+ p->globend |= GF_IGNCASE;
+ }
+#endif
+
if (!strp) {
pscan = (Upat)(patout + startoff);
diff --git a/Src/zsh.h b/Src/zsh.h
index a26b2d05b..d70a4017c 100644
--- a/Src/zsh.h
+++ b/Src/zsh.h
@@ -2387,6 +2387,7 @@ enum {
BSDECHO,
CASEGLOB,
CASEMATCH,
+ CASEPATHS,
CBASES,
CDABLEVARS,
CDSILENT,