Return to BSD News archive
Received: by minnie.vk1xwt.ampr.org with NNTP
id AA1484 ; Tue, 23 Feb 93 14:43:38 EST
Path: sserve!manuel.anu.edu.au!munnari.oz.au!bruce.cs.monash.edu.au!monu6!escargot!minyos.xx.rmit.OZ.AU!s902113
From: s902113@minyos.xx.rmit.OZ.AU (Luke Mewburn)
Newsgroups: comp.unix.bsd
Subject: tcsh glob hacks
Date: 18 Feb 1993 16:28:20 GMT
Organization: RMIT Computer Centre
Lines: 192
Message-ID: <1m0df4INNajk@escargot.xx.rmit.OZ.AU>
NNTP-Posting-Host: minyos.xx.rmit.oz.au
In previous posts I submitted patches to 386bsd's and Net/2's glob
code to add new functionality to it. This patch for tcsh 6.03 adds
the same stuff to it as well.
diff -c tcsh-6.03/glob.3 tcsh/glob.3
*** tcsh-6.03/glob.3 Fri Nov 20 09:04:38 1992
--- tcsh/glob.3 Sat Feb 6 16:51:57 1993
***************
*** 98,103 ****
--- 98,106 ----
values defined in
.IR glob.h :
.TP
+ GLOB_ALTNOT
+ Use ``^'' instead of ``!'' as the negation character following ``[''.
+ .TP
GLOB_APPEND
Append pathnames generated to the ones from a previous call (or calls)
to
***************
*** 116,121 ****
--- 119,129 ----
for
.I pglob.
.TP
+ GLOB_DOTFILES
+ Match files that start with a ``.'', without the explicit need for a
+ ``.'' at the start of
+ .I pattern .
+ .TP
GLOB_DOOFFS
Make use of the
.I gl_offs
***************
*** 168,173 ****
--- 176,184 ----
.I GLOB_QUOTE
is set, its effect is present in the pattern returned.
.TP
+ GLOB_NODOT
+ Never match the filenames ``.'' and ``..''.
+ .TP
GLOB_QUOTE
Use the backslash (``\e'') character for quoting: every occurrence of
a backslash followed by a character in the pattern is replaced by that
***************
*** 285,294 ****
The
.I glob
function is expected to be POSIX 1003.2 compatible with the exception
! that the flag
! .I GLOB_QUOTE
and the fields
! .I gl_matchc
and
.I gl_flags
should not be used by applications striving for strict POSIX conformance.
--- 296,309 ----
The
.I glob
function is expected to be POSIX 1003.2 compatible with the exception
! that the flags
! .I GLOB_ALTNOT ,
! .I GLOB_DOTFILES ,
! .I GLOB_NODOT ,
! and
! .I GLOB_QUOTE ,
and the fields
! .I gl_matchc ,
and
.I gl_flags
should not be used by applications striving for strict POSIX conformance.
diff -c tcsh-6.03/glob.c tcsh/glob.c
*** tcsh-6.03/glob.c Fri Nov 20 09:04:24 1992
--- tcsh/glob.c Sat Feb 13 15:13:32 1993
***************
*** 51,56 ****
--- 51,60 ----
* Set in gl_flags if pattern contained a globbing character.
* GLOB_ALTNOT:
* Use ^ instead of ! for "not".
+ * GLOB_DOTFILES:
+ * .files don't need the explicit . at the start of the pattern
+ * GLOB_NODOT:
+ * Never match . or ..
* gl_matchc:
* Number of matches in the current invocation of glob.
*/
***************
*** 532,540 ****
--- 536,559 ----
register unsigned char *sc;
register Char *dc;
+
+ /* Initial DOT must be matched literally, unless GLOB_DOTFILES */
+ /* Won't match DOT or DOTDOT if GLOB_NODOT set. (GLOB_DOTFILES & */
+ /* GLOB_NODOT added 930206 by Luke Mewburn <zak@rmit.edu.au>) */
+ if (dp->d_name[0] == DOT) {
+ if (pglob->gl_flags & GLOB_NODOT)
+ if ((dp->d_name[1] == EOS) ||
+ (dp->d_name[1] == DOT && dp->d_name[2] == EOS))
+ continue;
+ if (!(pglob->gl_flags & GLOB_DOTFILES))
+ if (*pattern != '.')
+ continue;
+ }
+ #if 0
/* initial DOT must be matched literally */
if (dp->d_name[0] == DOT && *pattern != DOT)
continue;
+ #endif 0
for (sc = (unsigned char *) dp->d_name, dc = pathend;
(*dc++ = *sc++) != '\0';)
continue;
diff -c tcsh-6.03/glob.h tcsh/glob.h
*** tcsh-6.03/glob.h Fri Nov 20 09:04:25 1992
--- tcsh/glob.h Sat Feb 6 16:27:39 1993
***************
*** 59,64 ****
--- 59,66 ----
#define GLOB_NOMAGIC 0x100 /* like GLOB_NOCHECK but only if the pattern
* did not have any magic characters */
#define GLOB_ALTNOT 0x200 /* use alternate glob character [^ not !] */
+ #define GLOB_DOTFILES 0x400 /* .files don't need explict . in pattern */
+ #define GLOB_NODOT 0x800 /* never match . or .. */
#define GLOB_NOSPACE (-1) /* malloc call failed */
#define GLOB_ABEND (-2) /* unignored error */
diff -c tcsh-6.03/sh.glob.c tcsh/sh.glob.c
*** tcsh-6.03/sh.glob.c Fri Nov 20 09:04:20 1992
--- tcsh/sh.glob.c Sat Feb 6 17:21:56 1993
***************
*** 479,484 ****
--- 479,492 ----
globv.gl_pathv = 0;
globv.gl_pathc = 0;
+ /*
+ * Luke Mewburn <zak@rmit.edu.au>, 930206: add support for
+ * dotfiles and nodot.
+ */
+ if (adrof(STRdotfiles))
+ gflgs |= GLOB_DOTFILES;
+ if (adrof(STRnodot))
+ gflgs |= GLOB_NODOT;
if (nonomatch)
gflgs |= GLOB_NOCHECK;
diff -c tcsh-6.03/tc.const.c tcsh/tc.const.c
*** tcsh-6.03/tc.const.c Fri Nov 20 09:04:32 1992
--- tcsh/tc.const.c Sat Feb 6 17:17:10 1993
***************
*** 154,159 ****
--- 154,161 ----
Char STRnotify[] = { 'n', 'o', 't', 'i', 'f', 'y', '\0' };
Char STRprintexitvalue[] = { 'p', 'r', 'i', 'n', 't', 'e', 'x', 'i', 't', 'v',
'a', 'l', 'u', 'e', '\0' };
+ Char STRdotfiles[] = { 'd', 'o', 't', 'f', 'i', 'l', 'e', 's', '\0' };
+ Char STRnodot[] = { 'n', 'o', 'd', 'o', 't', '\0' };
Char STRLparensp[] = { '(', ' ', '\0' };
Char STRspRparen[] = { ' ', ')', '\0' };
Char STRspace[] = { ' ', '\0' };
diff -c tcsh-6.03/tcsh.man tcsh/tcsh.man
*** tcsh-6.03/tcsh.man Fri Nov 20 09:04:39 1992
--- tcsh/tcsh.man Sat Feb 6 17:16:44 1993
***************
*** 3214,3219 ****
--- 3214,3223 ----
the first directory on the stack etc. Setting $dirstack resets all
the stack entries, but the current working directory which is preserved.
.TP 10
+ .B dotfiles
+ Glob files that start with a ``.'' without the explicit need for a
+ ``.'' at the start of the pattern.
+ .TP 10
.B dunique
Push only directories that are not already in the directory stack.
.TP 10
***************
*** 3290,3295 ****
--- 3294,3302 ----
.TP 10
.B nobeep
Disables beeping completely.
+ .TP 10
+ .B nodot
+ Never match the filenames ``.'' or ``..'' in filename globbing.
.TP 10
.B nokanji
If kanji support is enable, setting this variable disables it, so that