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