diff options
Diffstat (limited to 'include/compat/sys/stat.h')
-rw-r--r-- | include/compat/sys/stat.h | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/include/compat/sys/stat.h b/include/compat/sys/stat.h new file mode 100644 index 0000000..55135d8 --- /dev/null +++ b/include/compat/sys/stat.h | |||
@@ -0,0 +1,95 @@ | |||
1 | /* | ||
2 | * Public domain | ||
3 | * sys/stat.h compatibility shim | ||
4 | */ | ||
5 | |||
6 | #ifndef LIBCRYPTOCOMPAT_SYS_STAT_H | ||
7 | #define LIBCRYPTOCOMPAT_SYS_STAT_H | ||
8 | |||
9 | #ifdef _MSC_VER | ||
10 | #include <windows.h> | ||
11 | #include <../include/sys/stat.h> | ||
12 | |||
13 | /* File type and permission flags for stat() */ | ||
14 | #if !defined(S_IFMT) | ||
15 | # define S_IFMT _S_IFMT /* File type mask */ | ||
16 | #endif | ||
17 | #if !defined(S_IFDIR) | ||
18 | # define S_IFDIR _S_IFDIR /* Directory */ | ||
19 | #endif | ||
20 | #if !defined(S_IFCHR) | ||
21 | # define S_IFCHR _S_IFCHR /* Character device */ | ||
22 | #endif | ||
23 | #if !defined(S_IFFIFO) | ||
24 | # define S_IFFIFO _S_IFFIFO /* Pipe */ | ||
25 | #endif | ||
26 | #if !defined(S_IFREG) | ||
27 | # define S_IFREG _S_IFREG /* Regular file */ | ||
28 | #endif | ||
29 | #if !defined(S_IREAD) | ||
30 | # define S_IREAD _S_IREAD /* Read permission */ | ||
31 | #endif | ||
32 | #if !defined(S_IWRITE) | ||
33 | # define S_IWRITE _S_IWRITE /* Write permission */ | ||
34 | #endif | ||
35 | #if !defined(S_IEXEC) | ||
36 | # define S_IEXEC _S_IEXEC /* Execute permission */ | ||
37 | #endif | ||
38 | #if !defined(S_IFIFO) | ||
39 | # define S_IFIFO _S_IFIFO /* Pipe */ | ||
40 | #endif | ||
41 | #if !defined(S_IFBLK) | ||
42 | # define S_IFBLK 0 /* Block device */ | ||
43 | #endif | ||
44 | #if !defined(S_IFLNK) | ||
45 | # define S_IFLNK 0 /* Link */ | ||
46 | #endif | ||
47 | #if !defined(S_IFSOCK) | ||
48 | # define S_IFSOCK 0 /* Socket */ | ||
49 | #endif | ||
50 | |||
51 | #if defined(_MSC_VER) | ||
52 | # define S_IRUSR S_IREAD /* Read user */ | ||
53 | # define S_IWUSR S_IWRITE /* Write user */ | ||
54 | # define S_IXUSR 0 /* Execute user */ | ||
55 | # define S_IRGRP 0 /* Read group */ | ||
56 | # define S_IWGRP 0 /* Write group */ | ||
57 | # define S_IXGRP 0 /* Execute group */ | ||
58 | # define S_IROTH 0 /* Read others */ | ||
59 | # define S_IWOTH 0 /* Write others */ | ||
60 | # define S_IXOTH 0 /* Execute others */ | ||
61 | #endif | ||
62 | |||
63 | /* File type flags for d_type */ | ||
64 | #define DT_UNKNOWN 0 | ||
65 | #define DT_REG S_IFREG | ||
66 | #define DT_DIR S_IFDIR | ||
67 | #define DT_FIFO S_IFIFO | ||
68 | #define DT_SOCK S_IFSOCK | ||
69 | #define DT_CHR S_IFCHR | ||
70 | #define DT_BLK S_IFBLK | ||
71 | #define DT_LNK S_IFLNK | ||
72 | |||
73 | /* Macros for converting between st_mode and d_type */ | ||
74 | #define IFTODT(mode) ((mode) & S_IFMT) | ||
75 | #define DTTOIF(type) (type) | ||
76 | |||
77 | /* | ||
78 | * File type macros. Note that block devices, sockets and links cannot be | ||
79 | * distinguished on Windows and the macros S_ISBLK, S_ISSOCK and S_ISLNK are | ||
80 | * only defined for compatibility. These macros should always return false | ||
81 | * on Windows. | ||
82 | */ | ||
83 | #define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO) | ||
84 | #define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) | ||
85 | #define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG) | ||
86 | #define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK) | ||
87 | #define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK) | ||
88 | #define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR) | ||
89 | #define S_ISBLK(mode) (((mode) & S_IFMT) == S_IFBLK) | ||
90 | |||
91 | #else | ||
92 | #include_next <sys/stat.h> | ||
93 | #endif | ||
94 | |||
95 | #endif | ||