aboutsummaryrefslogtreecommitdiff
path: root/bin/csh
diff options
context:
space:
mode:
Diffstat (limited to 'bin/csh')
-rw-r--r--bin/csh/glob.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/bin/csh/glob.c b/bin/csh/glob.c
index 3947275c194d..7a3d21eb4231 100644
--- a/bin/csh/glob.c
+++ b/bin/csh/glob.c
@@ -354,7 +354,7 @@ static Char **
libglob(vl)
Char **vl;
{
- int gflgs = GLOB_QUOTE | GLOB_NOCHECK;
+ int gflgs = GLOB_QUOTE | GLOB_NOCHECK, badmagic = 0, goodmagic = 0;
glob_t globv;
char *ptr;
@@ -377,12 +377,21 @@ libglob(vl)
}
if (!nonomatch && (globv.gl_matchc == 0) &&
(globv.gl_flags & GLOB_MAGCHAR)) {
- globfree(&globv);
- return (NULL);
- }
+ badmagic = 1;
+ globv.gl_pathc--;
+ free(globv.gl_pathv[globv.gl_pathc]);
+ globv.gl_pathv[globv.gl_pathc] = (char *)0;
+ } else
+ if (!nonomatch && (globv.gl_matchc > 0) &&
+ (globv.gl_flags & GLOB_MAGCHAR))
+ goodmagic = 1;
gflgs |= GLOB_APPEND;
}
while (*++vl);
+ if (badmagic && !goodmagic) {
+ globfree(&globv);
+ return (NULL);
+ }
vl = blk2short(globv.gl_pathv);
globfree(&globv);
return (vl);