+2014-02-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ 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 <eblake@redhat.com>
pthread: work around winpthread header pollution on mingw
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");
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");
}