summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>2006-07-26 14:06:57 +0000
committerJim Meyering <jim@meyering.net>2006-07-26 14:06:57 +0000
commitd2c6ae7fbc6c26e45fe33882c673897602afc0d2 (patch)
tree230eb291643bcf85a84df446d54d8d48ce15b9b9
parent2465b478fd0952f68aaede95f6b2a0e1d0149f74 (diff)
downloadcoreutils-d2c6ae7fbc6c26e45fe33882c673897602afc0d2.tar.xz
* 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.
-rw-r--r--ChangeLog8
-rw-r--r--doc/ChangeLog5
-rw-r--r--doc/coreutils.texi3
-rw-r--r--src/ls.c25
4 files changed, 29 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index 26f21e0f7..5346af715 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2006-07-26 Jim Meyering <jim@meyering.net>
+ * 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 <jim@meyering.net>
+
Checking in a change from Paul.
2006-07-25 Paul Eggert <eggert@cs.ucla.edu>
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 <jim@meyering.net>
+
+ * coreutils.texi (What information is listed): Mention that missing
+ pieces of information are marked with "?". From Paul Eggert.
+
2006-07-25 Paul Eggert <eggert@cs.ucla.edu>
* 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;
}
}