Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Show file modes in octal
- X-seq: zsh-workers 10584
 
- From: Peter Stephenson <pws@xxxxxxxxxxxxxxxxxxxxxxxxx>
 
- To: zsh-workers@xxxxxxxxxxxxxx (Zsh hackers list)
 
- Subject: Show file modes in octal
 
- Date: Fri, 07 Apr 2000 17:26:05 +0100
 
- Mailing-list: contact zsh-workers-help@xxxxxxxxxxxxxx; run by ezmlm
 
The stat module shows file modes in decimal, which is logical if it is
printing raw numbers, but not very readable.  This allows the option -o to
show a raw mode in octal.  It doesn't affect the format of an ls-like
mode.
By the way, what's going on here?
% cd Src/Modules
% MODULE_PATH=.
% zmodload
zsh/complete
zsh/compctl
zsh/zutil
zsh/main
zsh/zle
zsh/parameter
% zmodload stat
zsh: failed to load module: zsh/stat
I didn't ask it to, and the stat module in the current directory is the
real one.  How is it finding the alias?
This will be committed later on.
Index: Doc/Zsh/mod_stat.yo
===================================================================
RCS file: /cvsroot/zsh/zsh/Doc/Zsh/mod_stat.yo,v
retrieving revision 1.1.1.8
diff -u -u -r1.1.1.8 mod_stat.yo
--- Doc/Zsh/mod_stat.yo	1999/12/20 11:24:39	1.1.1.8
+++ Doc/Zsh/mod_stat.yo	2000/04/07 16:19:56
@@ -7,7 +7,7 @@
 findex(stat)
 cindex(files, listing)
 cindex(files, examining)
-item(tt(stat) [ tt(-gnNlLtTrs) ] [ tt(-f) var(fd) ] \
+item(tt(stat) [ tt(-gnNolLtTrs) ] [ tt(-f) var(fd) ] \
     [ tt(-H) var(hash) ] [ tt(-A) var(array) ] \
     [ tt(-F) var(fmt) ] [ tt(PLUS())var(element) ] [ var(file) ... ])(
 The command acts as a front end to the tt(stat) system call (see
@@ -128,6 +128,13 @@
 )
 item(tt(-N))(
 Never show the names of files.
+)
+item(tt(-o))(
+If a raw file mode is printed, show it in octal, which is more useful for
+human consumption than the default of decimal.  A leading zero will be
+printed in this case.  Note that this does not affect whether a raw or
+formatted file mode is shown, which is controlled by the tt(-r) and tt(-s)
+options, nor whether a mode is shown at all.
 )
 item(tt(-r))(
 Print raw data (the default format) alongside string
Index: Src/Modules/stat.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Modules/stat.c,v
retrieving revision 1.1.1.13
diff -u -u -r1.1.1.13 stat.c
--- Src/Modules/stat.c	2000/03/14 11:17:59	1.1.1.13
+++ Src/Modules/stat.c	2000/04/07 16:19:56
@@ -35,7 +35,7 @@
 		   ST_BLKSIZE, ST_BLOCKS, ST_READLINK, ST_COUNT };
 enum statflags { STF_NAME = 1,  STF_FILE = 2, STF_STRING = 4, STF_RAW = 8,
 		     STF_PICK = 16, STF_ARRAY = 32, STF_GMT = 64,
-		     STF_HASH = 128 };
+		     STF_HASH = 128, STF_OCTAL = 256 };
 static char *statelts[] = { "device", "inode", "mode", "nlink",
 				"uid", "gid", "rdev", "size", "atime",
 				"mtime", "ctime", "blksize", "blocks",
@@ -47,7 +47,8 @@
 statmodeprint(mode_t mode, char *outbuf, int flags)
 {
     if (flags & STF_RAW) {
-	sprintf(outbuf, "%lu", (unsigned long)mode);
+	sprintf(outbuf, (flags & STF_OCTAL) ? "0%lo" : "%lu",
+		(unsigned long)mode);
 	if (flags & STF_STRING)
 	    strcat(outbuf, " (");
     }
@@ -359,7 +360,7 @@
 	    flags |= STF_PICK;
 	} else {
 	    for (; *arg; arg++) {
-		if (strchr("glLnNrstT", *arg))
+		if (strchr("glLnNorstT", *arg))
 		    ops[STOUC(*arg)] = 1;
 		else if (*arg == 'A') {
 		    if (arg[1]) {
@@ -472,6 +473,8 @@
 	flags |= STF_RAW;
     if (ops['n'])
 	flags |= STF_FILE;
+    if (ops['o'])
+	flags |= STF_OCTAL;
     if (ops['t'])
 	flags |= STF_NAME;
 
-- 
Peter Stephenson <pws@xxxxxxxxxxxxxxxxxxxxxxxxx>
Cambridge Silicon Radio, Unit 300, Science Park, Milton Road,
Cambridge, CB4 0XL, UK                          Tel: +44 (0)1223 392070
Messages sorted by:
Reverse Date,
Date,
Thread,
Author