aboutsummaryrefslogtreecommitdiff
path: root/include/compat/sys/stat.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/compat/sys/stat.h')
-rw-r--r--include/compat/sys/stat.h95
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