bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] file-type: add support for doors and other less-common file type


From: Paul Eggert
Subject: [PATCH] file-type: add support for doors and other less-common file types
Date: Wed, 5 Feb 2014 11:09:15 -0800

Problem with S_ISDOOR reported by Rich Burridge.
* lib/file-type.c (file_type): Do S_ISLNK early too.  Do S_TYPEIS*
macros before the rest.  Add S_ISCTG, S_ISDOOR, S_ISMPB, S_ISMPC,
S_ISMPX, S_ISNAM, S_ISNWK, S_ISOFD, S_ISOFL, S_ISPORT, S_ISWHT.
---
 ChangeLog       |  8 ++++++++
 lib/file-type.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++----------
 2 files changed, 59 insertions(+), 11 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index d117e75..96c544e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2014-02-05  Paul Eggert  <address@hidden>
+
+       file-type: add support for doors and other less-common file types
+       Problem with S_ISDOOR reported by Rich Burridge.
+       * lib/file-type.c (file_type): Do S_ISLNK early too.  Do S_TYPEIS*
+       macros before the rest.  Add S_ISCTG, S_ISDOOR, S_ISMPB, S_ISMPC,
+       S_ISMPX, S_ISNAM, S_ISNWK, S_ISOFD, S_ISOFL, S_ISPORT, S_ISWHT.
+
 2014-01-23  Eric Blake  <address@hidden>
 
        pthread: work around winpthread header pollution on mingw
diff --git a/lib/file-type.c b/lib/file-type.c
index c6c793a..bf3026f 100644
--- a/lib/file-type.c
+++ b/lib/file-type.c
@@ -34,26 +34,19 @@ file_type (struct stat const *st)
      To keep diagnostics grammatical in English, the returned string
      must start with a consonant.  */
 
+  /* Do these three first, as they're the most common.  */
+
   if (S_ISREG (st->st_mode))
     return st->st_size == 0 ? _("regular empty file") : _("regular file");
 
   if (S_ISDIR (st->st_mode))
     return _("directory");
 
-  if (S_ISBLK (st->st_mode))
-    return _("block special file");
-
-  if (S_ISCHR (st->st_mode))
-    return _("character special file");
-
-  if (S_ISFIFO (st->st_mode))
-    return _("fifo");
-
   if (S_ISLNK (st->st_mode))
     return _("symbolic link");
 
-  if (S_ISSOCK (st->st_mode))
-    return _("socket");
+  /* Do the S_TYPEIS* macros next, as they may be implemented in terms
+     of S_ISNAM, and we want the more-specialized interpretation.  */
 
   if (S_TYPEISMQ (st))
     return _("message queue");
@@ -67,5 +60,52 @@ file_type (struct stat const *st)
   if (S_TYPEISTMO (st))
     return _("typed memory object");
 
+  /* The remaining are in alphabetical order.  */
+
+  if (S_ISBLK (st->st_mode))
+    return _("block special file");
+
+  if (S_ISCHR (st->st_mode))
+    return _("character special file");
+
+  if (S_ISCTG (st->st_mode))
+    return _("contiguous data");
+
+  if (S_ISFIFO (st->st_mode))
+    return _("fifo");
+
+  if (S_ISDOOR (st->st_mode))
+    return _("door");
+
+  if (S_ISMPB (st->st_mode))
+    return _("multiplexed block special file");
+
+  if (S_ISMPC (st->st_mode))
+    return _("multiplexed character special file");
+
+  if (S_ISMPX (st->st_mode))
+    return _("multiplexed file");
+
+  if (S_ISNAM (st->st_mode))
+    return _("named file");
+
+  if (S_ISNWK (st->st_mode))
+    return _("network special file");
+
+  if (S_ISOFD (st->st_mode))
+    return _("migrated file with data");
+
+  if (S_ISOFL (st->st_mode))
+    return _("migrated file without data");
+
+  if (S_ISPORT (st->st_mode))
+    return _("port");
+
+  if (S_ISSOCK (st->st_mode))
+    return _("socket");
+
+  if (S_ISWHT (st->st_mode))
+    return _("whiteout");
+
   return _("weird file");
 }
-- 
1.8.5.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]