Return to BSD News archive
Received: by minnie.vk1xwt.ampr.org with NNTP id AA5973 ; Sat, 02 Jan 93 10:07:55 EST Newsgroups: comp.unix.bsd Path: sserve!manuel.anu.edu.au!munnari.oz.au!uunet!spool.mu.edu!umn.edu!umeecs!quip.eecs.umich.edu!dmuntz From: dmuntz@quip.eecs.umich.edu (Dan Muntz) Subject: [386BSD] csh globbing bug Message-ID: <1993Jan5.051039.29362@zip.eecs.umich.edu> Sender: news@zip.eecs.umich.edu (Mr. News) Organization: University of Michigan EECS Dept., Ann Arbor, MI Date: Tue, 5 Jan 1993 05:10:39 GMT Lines: 74 I don't know if this one has been mentioned or fixed. Any wildcard which fails to match anything causes a "No match" for the entire argument list. The included patch takes care to mimic the standard globbing of csh (if it has been changed for POSIX or somesuch someone please let me know :) To see the bug: % ls foo.a bar.b % ls *.b *.c ls: No match. -Dan dmuntz@eecs.umich.edu And the patch (to /usr/src/bin/csh/glob.c): *** glob.c.ORIG Sun Jan 3 19:45:16 1993 --- glob.c Sun Jan 3 23:46:47 1993 *************** *** 354,360 **** libglob(vl) Char **vl; { ! int gflgs = GLOB_QUOTE | GLOB_NOCHECK; glob_t globv; char *ptr; --- 354,360 ---- libglob(vl) Char **vl; { ! int gflgs = GLOB_QUOTE | GLOB_NOCHECK, badmagic = 0, goodmagic = 0; glob_t globv; char *ptr; *************** *** 377,388 **** } if (!nonomatch && (globv.gl_matchc == 0) && (globv.gl_flags & GLOB_MAGCHAR)) { ! globfree(&globv); ! return (NULL); ! } gflgs |= GLOB_APPEND; } while (*++vl); vl = blk2short(globv.gl_pathv); globfree(&globv); return (vl); --- 377,397 ---- } if (!nonomatch && (globv.gl_matchc == 0) && (globv.gl_flags & GLOB_MAGCHAR)) { ! 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);