From d2c6ae7fbc6c26e45fe33882c673897602afc0d2 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Wed, 26 Jul 2006 14:06:57 +0000 Subject: * src/ls.c (print_color_indicator): Test for S_IFREG first, rather than having the code test for all of the other types first. Hoist the set-uid/gid-testing code "up" into this new block. Classify any other type of file (e.g., S_TYPEISSHM, etc.) as C_ORPHAN, not as C_FILE. * doc/coreutils.texi (What information is listed): Mention that missing pieces of information are marked with "?". From Paul Eggert. --- ChangeLog | 8 ++++++++ doc/ChangeLog | 5 +++++ doc/coreutils.texi | 3 ++- src/ls.c | 25 ++++++++++++++----------- 4 files changed, 29 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 26f21e0f7..5346af715 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2006-07-26 Jim Meyering + + * src/ls.c (print_color_indicator): Test for S_IFREG first, rather + than having the code test for all of the other types first. + Hoist the set-uid/gid-testing code "up" into this new block. + Classify any other type of file (e.g., S_TYPEISSHM, etc.) as + C_ORPHAN, not as C_FILE. + 2006-07-26 Jim Meyering Checking in a change from Paul. diff --git a/doc/ChangeLog b/doc/ChangeLog index 22490068d..97d4ca1cc 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2006-07-26 Jim Meyering + + * coreutils.texi (What information is listed): Mention that missing + pieces of information are marked with "?". From Paul Eggert. + 2006-07-25 Paul Eggert * perm.texi (Directory Setuid and Setgid): Explain that this is a diff --git a/doc/coreutils.texi b/doc/coreutils.texi index dacac7df9..64accb03c 100644 --- a/doc/coreutils.texi +++ b/doc/coreutils.texi @@ -5795,7 +5795,8 @@ uniquely identifies each file within a particular file system.) In addition to the name of each file, print the file type, file mode bits, number of hard links, owner name, group name, size, and timestamp (@pxref{Formatting file timestamps}), normally -the modification time. +the modification time. Print question marks for information that +cannot be determined. Normally the size is printed as a byte count without punctuation, but this can be overridden (@pxref{Block size}). For example, @option{-h} diff --git a/src/ls.c b/src/ls.c index 5ad5bfe2c..85a4bc7e7 100644 --- a/src/ls.c +++ b/src/ls.c @@ -3832,7 +3832,7 @@ static void print_color_indicator (const char *name, mode_t mode, int linkok, bool stat_ok, enum filetype filetype) { - int type = C_FILE; + int type; struct color_ext_type *ext; /* Color extension */ size_t len; /* Length of name */ @@ -3847,7 +3847,17 @@ print_color_indicator (const char *name, mode_t mode, int linkok, } else { - if (S_ISDIR (mode)) + if (S_ISREG (mode)) + { + type = C_FILE; + if ((mode & S_ISUID) != 0) + type = C_SETUID; + else if ((mode & S_ISGID) != 0) + type = C_SETGID; + else if ((mode & S_IXUGO) != 0) + type = C_EXEC; + } + else if (S_ISDIR (mode)) { if ((mode & S_ISVTX) && (mode & S_IWOTH)) type = C_STICKY_OTHER_WRITABLE; @@ -3872,16 +3882,9 @@ print_color_indicator (const char *name, mode_t mode, int linkok, else if (S_ISDOOR (mode)) type = C_DOOR; else - type = C_ORPHAN; - - if (type == C_FILE) { - if ((mode & S_ISUID) != 0) - type = C_SETUID; - else if ((mode & S_ISGID) != 0) - type = C_SETGID; - else if ((mode & S_IXUGO) != 0) - type = C_EXEC; + /* Classify a file of some other type as C_ORPHAN. */ + type = C_ORPHAN; } } -- cgit v1.2.3-70-g09d2