raw
vtools_genesis          1 /* Written by Paul Eggert.  */
vtools_genesis 2
vtools_genesis 3 #include "filetype.h"
vtools_genesis 4
vtools_genesis 5 char const *
vtools_genesis 6 file_type(struct stat const *st) {
vtools_genesis 7 /* To keep diagnostics grammatical in English, the returned string
vtools_genesis 8 must start with a consonant. */
vtools_genesis 9
vtools_genesis 10 /* Do these three first, as they're the most common. */
vtools_genesis 11
vtools_genesis 12 if (S_ISREG (st->st_mode))
vtools_genesis 13 return st->st_size == 0 ? ("regular empty file") : ("regular file");
vtools_genesis 14
vtools_genesis 15 if (S_ISDIR (st->st_mode))
vtools_genesis 16 return ("directory");
vtools_genesis 17
vtools_genesis 18 if (S_ISLNK (st->st_mode))
vtools_genesis 19 return ("symbolic link");
vtools_genesis 20
vtools_genesis 21 #if 0
vtools_genesis 22 /* Do the |S_TYPEIS*| macros next, as they may be implemented in
vtools_genesis 23 terms of |S_ISNAM|, and we want the more-specialized
vtools_genesis 24 interpretation. */
vtools_genesis 25
vtools_genesis 26 if (S_TYPEISMQ (st))
vtools_genesis 27 return ("message queue");
vtools_genesis 28
vtools_genesis 29 if (S_TYPEISSEM (st))
vtools_genesis 30 return ("semaphore");
vtools_genesis 31
vtools_genesis 32 if (S_TYPEISSHM (st))
vtools_genesis 33 return ("shared memory object");
vtools_genesis 34
vtools_genesis 35 if (S_TYPEISTMO (st))
vtools_genesis 36 return ("typed memory object");
vtools_genesis 37
vtools_genesis 38 /* The remaining are in alphabetical order. */
vtools_genesis 39
vtools_genesis 40 if (S_ISBLK (st->st_mode))
vtools_genesis 41 return ("block special file");
vtools_genesis 42
vtools_genesis 43 if (S_ISCHR (st->st_mode))
vtools_genesis 44 return ("character special file");
vtools_genesis 45
vtools_genesis 46 if (S_ISCTG (st->st_mode))
vtools_genesis 47 return ("contiguous data");
vtools_genesis 48
vtools_genesis 49 if (S_ISFIFO (st->st_mode))
vtools_genesis 50 return ("fifo");
vtools_genesis 51
vtools_genesis 52 if (S_ISDOOR (st->st_mode))
vtools_genesis 53 return ("door");
vtools_genesis 54
vtools_genesis 55 if (S_ISMPB (st->st_mode))
vtools_genesis 56 return ("multiplexed block special file");
vtools_genesis 57
vtools_genesis 58 if (S_ISMPC (st->st_mode))
vtools_genesis 59 return ("multiplexed character special file");
vtools_genesis 60
vtools_genesis 61 if (S_ISMPX (st->st_mode))
vtools_genesis 62 return ("multiplexed file");
vtools_genesis 63
vtools_genesis 64 if (S_ISNAM (st->st_mode))
vtools_genesis 65 return ("named file");
vtools_genesis 66
vtools_genesis 67 if (S_ISNWK (st->st_mode))
vtools_genesis 68 return ("network special file");
vtools_genesis 69
vtools_genesis 70 if (S_ISOFD (st->st_mode))
vtools_genesis 71 return ("migrated file with data");
vtools_genesis 72
vtools_genesis 73 if (S_ISOFL (st->st_mode))
vtools_genesis 74 return ("migrated file without data");
vtools_genesis 75
vtools_genesis 76 if (S_ISPORT (st->st_mode))
vtools_genesis 77 return ("port");
vtools_genesis 78
vtools_genesis 79 if (S_ISSOCK (st->st_mode))
vtools_genesis 80 return ("socket");
vtools_genesis 81
vtools_genesis 82 if (S_ISWHT (st->st_mode))
vtools_genesis 83 return ("whiteout");
vtools_genesis 84 #endif
vtools_genesis 85
vtools_genesis 86 return ("weird file");
vtools_genesis 87 }