Update LibreSSL from version 2.4.3 => 2.4.4
[dragonfly.git] / crypto / libressl / include / compat / sys / stat.h
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 #ifndef _MSC_VER
10 #include_next <sys/stat.h>
11 #else
12
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
19
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
57
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
69
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
79
80 /* Macros for converting between st_mode and d_type */
81 #define IFTODT(mode) ((mode) & S_IFMT)
82 #define DTTOIF(type) (type)
83
84 /*
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.
89  */
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)
97
98 #endif
99
100 #endif