diff options
Diffstat (limited to 'bin/csh')
| -rw-r--r-- | bin/csh/glob.c | 17 | 
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);  | 
