1 /* Return a string describing the type of a file. 2 3 Copyright (C) 1993, 1994, 2001, 2002, 2004 Free Software Foundation, Inc. 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 2, or (at your option) 8 any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program; if not, write to the Free Software Foundation, 17 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 18 19 /* Written by Paul Eggert and Jim Meyering. */ 20 21 #ifndef FILE_TYPE_H 22 # define FILE_TYPE_H 1 23 24 # if ! defined S_ISREG && ! defined S_IFREG 25 you must include <sys/stat.h> before including this file 26 # endif 27 28 char const *file_type (struct stat const *); 29 30 # ifndef S_IFMT 31 # define S_IFMT 0170000 32 # endif 33 34 # if STAT_MACROS_BROKEN 35 # undef S_ISBLK 36 # undef S_ISCHR 37 # undef S_ISDIR 38 # undef S_ISDOOR 39 # undef S_ISFIFO 40 # undef S_ISLNK 41 # undef S_ISNAM 42 # undef S_ISMPB 43 # undef S_ISMPC 44 # undef S_ISNWK 45 # undef S_ISREG 46 # undef S_ISSOCK 47 # endif 48 49 50 # ifndef S_ISBLK 51 # ifdef S_IFBLK 52 # define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) 53 # else 54 # define S_ISBLK(m) 0 55 # endif 56 # endif 57 58 # ifndef S_ISCHR 59 # ifdef S_IFCHR 60 # define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) 61 # else 62 # define S_ISCHR(m) 0 63 # endif 64 # endif 65 66 # ifndef S_ISDIR 67 # ifdef S_IFDIR 68 # define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) 69 # else 70 # define S_ISDIR(m) 0 71 # endif 72 # endif 73 74 # ifndef S_ISDOOR /* Solaris 2.5 and up */ 75 # ifdef S_IFDOOR 76 # define S_ISDOOR(m) (((m) & S_IFMT) == S_IFDOOR) 77 # else 78 # define S_ISDOOR(m) 0 79 # endif 80 # endif 81 82 # ifndef S_ISFIFO 83 # ifdef S_IFIFO 84 # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) 85 # else 86 # define S_ISFIFO(m) 0 87 # endif 88 # endif 89 90 # ifndef S_ISLNK 91 # ifdef S_IFLNK 92 # define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) 93 # else 94 # define S_ISLNK(m) 0 95 # endif 96 # endif 97 98 # ifndef S_ISMPB /* V7 */ 99 # ifdef S_IFMPB 100 # define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB) 101 # define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC) 102 # else 103 # define S_ISMPB(m) 0 104 # define S_ISMPC(m) 0 105 # endif 106 # endif 107 108 # ifndef S_ISNAM /* Xenix */ 109 # ifdef S_IFNAM 110 # define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM) 111 # else 112 # define S_ISNAM(m) 0 113 # endif 114 # endif 115 116 # ifndef S_ISNWK /* HP/UX */ 117 # ifdef S_IFNWK 118 # define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK) 119 # else 120 # define S_ISNWK(m) 0 121 # endif 122 # endif 123 124 # ifndef S_ISREG 125 # ifdef S_IFREG 126 # define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) 127 # else 128 # define S_ISREG(m) 0 129 # endif 130 # endif 131 132 # ifndef S_ISSOCK 133 # ifdef S_IFSOCK 134 # define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) 135 # else 136 # define S_ISSOCK(m) 0 137 # endif 138 # endif 139 140 141 # ifndef S_TYPEISMQ 142 # define S_TYPEISMQ(p) 0 143 # endif 144 145 # ifndef S_TYPEISTMO 146 # define S_TYPEISTMO(p) 0 147 # endif 148 149 150 # ifndef S_TYPEISSEM 151 # ifdef S_INSEM 152 # define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM) 153 # else 154 # define S_TYPEISSEM(p) 0 155 # endif 156 # endif 157 158 # ifndef S_TYPEISSHM 159 # ifdef S_INSHD 160 # define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD) 161 # else 162 # define S_TYPEISSHM(p) 0 163 # endif 164 # endif 165 166 #endif /* FILE_TYPE_H */ 167