# HG changeset patch # User Paul Eggert # Date 1391627355 28800 # Node ID 69fa068eff4e04b4b0b219fd48ce36710c9a4f37 # Parent e52ef9f516810f9cc5fe7c57452ce4ecbae1ecc4 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. diff -r e52ef9f51681 -r 69fa068eff4e ChangeLog --- a/ChangeLog Thu Jan 30 15:46:38 2014 -0800 +++ b/ChangeLog Wed Feb 05 11:09:15 2014 -0800 @@ -1,3 +1,11 @@ +2014-02-05 Paul Eggert + + 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 pthread: work around winpthread header pollution on mingw diff -r e52ef9f51681 -r 69fa068eff4e lib/file-type.c --- a/lib/file-type.c Thu Jan 30 15:46:38 2014 -0800 +++ b/lib/file-type.c Wed Feb 05 11:09:15 2014 -0800 @@ -34,26 +34,19 @@ 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 @@ 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"); }