1 /* 2 * Public domain 3 * sys/stat.h compatibility shim 4 */ 5 module libressl_d.compat.sys.stat; 6 7 8 private static import libressl_d.compat.stdio; 9 public import core.sys.posix.sys.stat; 10 public import core.sys.windows.stat; 11 public import core.sys.windows.windows; 12 13 extern (C): 14 nothrow @nogc: 15 16 version (Posix) { 17 /* for old MinGW */ 18 //enum S_IRWXU = 0; 19 //enum S_IRWXG = 0; 20 //enum S_IRGRP = 0; 21 //enum S_IRWXO = 0; 22 //enum S_IROTH = 0; 23 } else { 24 /* File type and permission flags for stat() */ 25 /** 26 * File type mask 27 */ 28 alias S_IFMT = core.sys.windows.stat.S_IFMT; 29 30 /** 31 * Directory 32 */ 33 alias S_IFDIR = core.sys.windows.stat.S_IFDIR; 34 35 /** 36 * Character device 37 */ 38 alias S_IFCHR = core.sys.windows.stat.S_IFCHR; 39 40 //#if !defined(S_IFFIFO) 41 /* 42 * Pipe 43 */ 44 //alias S_IFFIFO = _S_IFFIFO; 45 //#endif 46 47 /** 48 * Regular file 49 */ 50 alias S_IFREG = core.sys.windows.stat.S_IFREG; 51 52 /** 53 * Read permission 54 */ 55 alias S_IREAD = core.sys.windows.stat.S_IREAD; 56 57 /** 58 * Write permission 59 */ 60 alias S_IWRITE = core.sys.windows.stat.S_IWRITE; 61 62 /** 63 * Execute permission 64 */ 65 alias S_IEXEC = core.sys.windows.stat.S_IEXEC; 66 67 /** 68 * Pipe 69 */ 70 alias S_IFIFO = core.sys.windows.stat.S_IFIFO; 71 72 /** 73 * Block device 74 */ 75 alias S_IFBLK = core.sys.windows.stat.S_IFBLK; 76 77 /** 78 * Link 79 */ 80 enum S_IFLNK = 0; 81 82 /** 83 * Socket 84 */ 85 enum S_IFSOCK = 0; 86 87 version (Windows) { 88 /** 89 * RWX user 90 */ 91 enum S_IRWXU = 0; 92 93 /** 94 * Read user 95 */ 96 alias S_IRUSR = libressl_d.compat.stdio.S_IREAD; 97 98 /** 99 * Write user 100 */ 101 alias S_IWUSR = libressl_d.compat.stdio.S_IWRITE; 102 103 /** 104 * Execute user 105 */ 106 enum S_IXUSR = 0; 107 108 /** 109 * RWX group 110 */ 111 enum S_IRWXG = 0; 112 113 /** 114 * Read group 115 */ 116 enum S_IRGRP = 0; 117 118 /** 119 * Write group 120 */ 121 enum S_IWGRP = 0; 122 123 /** 124 * Execute group 125 */ 126 enum S_IXGRP = 0; 127 128 /** 129 * RWX others 130 */ 131 enum S_IRWXO = 0; 132 133 /** 134 * Read others 135 */ 136 enum S_IROTH = 0; 137 138 /** 139 * Write others 140 */ 141 enum S_IWOTH = 0; 142 143 /** 144 * Execute others 145 */ 146 enum S_IXOTH = 0; 147 } 148 149 /* File type flags for d_type */ 150 enum DT_UNKNOWN = 0; 151 alias DT_REG = .S_IFREG; 152 alias DT_DIR = .S_IFDIR; 153 alias DT_FIFO = .S_IFIFO; 154 alias DT_SOCK = .S_IFSOCK; 155 alias DT_CHR = .S_IFCHR; 156 alias DT_BLK = .S_IFBLK; 157 alias DT_LNK = .S_IFLNK; 158 159 /* Macros for converting between st_mode and d_type */ 160 pragma(inline, true) 161 pure nothrow @safe @nogc @live 162 int IFTODT(int mode) 163 164 do 165 { 166 return mode & .S_IFMT; 167 } 168 169 //#define DTTOIF(type) (type) 170 171 /* 172 * File type macros. Note that block devices, sockets and links cannot be 173 * distinguished on Windows and the macros S_ISBLK, S_ISSOCK and S_ISLNK are 174 * only defined for compatibility. These macros should always return false 175 * on Windows. 176 */ 177 pragma(inline, true) 178 pure nothrow @safe @nogc @live 179 bool S_ISFIFO(int mode) 180 181 out(result) 182 { 183 assert(!result); 184 } 185 186 do 187 { 188 return (mode & .S_IFMT) == .S_IFIFO; 189 } 190 191 pragma(inline, true) 192 pure nothrow @safe @nogc @live 193 bool S_ISDIR(int mode) 194 195 out(result) 196 { 197 assert(!result); 198 } 199 200 do 201 { 202 return (mode & .S_IFMT) == .S_IFDIR; 203 } 204 205 pragma(inline, true) 206 pure nothrow @safe @nogc @live 207 bool S_ISREG(int mode) 208 209 out(result) 210 { 211 assert(!result); 212 } 213 214 do 215 { 216 return (mode & .S_IFMT) == .S_IFREG; 217 } 218 219 pragma(inline, true) 220 pure nothrow @safe @nogc @live 221 bool S_ISLNK(int mode) 222 223 out(result) 224 { 225 assert(!result); 226 } 227 228 do 229 { 230 return (mode & .S_IFMT) == .S_IFLNK; 231 } 232 233 pragma(inline, true) 234 pure nothrow @safe @nogc @live 235 bool S_ISSOCK(int mode) 236 237 out(result) 238 { 239 assert(!result); 240 } 241 242 do 243 { 244 return (mode & .S_IFMT) == .S_IFSOCK; 245 } 246 247 pragma(inline, true) 248 pure nothrow @safe @nogc @live 249 bool S_ISCHR(int mode) 250 251 out(result) 252 { 253 assert(!result); 254 } 255 256 do 257 { 258 return (mode & .S_IFMT) == .S_IFCHR; 259 } 260 261 pragma(inline, true) 262 pure nothrow @safe @nogc @live 263 bool S_ISBLK(int mode) 264 265 out(result) 266 { 267 assert(!result); 268 } 269 270 do 271 { 272 return (mode & .S_IFMT) == .S_IFBLK; 273 } 274 }