1 #ifndef QUIRK_UNISTD_H
2 #define QUIRK_UNISTD_H
3 #pragma message("winquirk: no unistd.h!")
4
5 #include <winsock2.h>
6 #include <ws2tcpip.h>
7 #include <windows.h>
8 #include <direct.h>
9 #include <errno.h>
10 #include <fcntl.h>
11 #include <io.h>
12 #include <stdio.h>
13 #include <stdlib.h>
14 #include <string.h>
15 #include <process.h>
16
17 #include <windef.h>
18 #include <winbase.h>
19 #include <sys/types.h>
20 #include <sys/stat.h>
21
22 #define getpid _getpid
23 #define popen _popen
24 #define pclose _pclose
25 #define ssize_t SSIZE_T
26
27 #if 0
28 static int gethostname(char *__name, size_t __len) {
29 DWORD len = __len;
30 if (0==GetComputerNameA(__name, &len))
31 return -1;
32 return 0;
33 }
34 #endif
35
36
37 #define environ _environ
38
39 /*
40 #define _IFMT 0170000 // type of file
41 #define _IFDIR 0040000 // directory
42 #define S_ISDIR(m) (((m)&_IFMT) == _IFDIR)
43 */
44
45 #define S_ISUID 0004000
46 #define S_IRWXU 0000700
47 #define S_IRWXG 0000070
48 #define S_IRWXO 0000007
49 #define S_ISGID 0002000
50 #define S_ISVTX 0001000
51
52 #define S_IRUSR 0000400
53 #define S_IWUSR 0000200
54
55 #define S_IRGRP 0000040
56 #define S_IWGRP 0000020
57
58 #define S_IROTH 0000004
59 #define S_IWOTH 0000002
60
61 #define PATH_SEPARATOR '\\'
62
63 #if defined(_MSC_VER) && !defined(S_IREAD)
64 # define S_IFMT _S_IFMT /* File type mask */
65 # define S_IFDIR _S_IFDIR /* Directory */
66 # define S_IFCHR _S_IFCHR /* Character device */
67 # define S_IFFIFO _S_IFFIFO /* Pipe */
68 # define S_IFREG _S_IFREG /* Regular file */
69 # define S_IREAD _S_IREAD /* Read permission */
70 # define S_IWRITE _S_IWRITE /* Write permission */
71 # define S_IEXEC _S_IEXEC /* Execute permission */
72 #endif
73
74 #define S_IFFIFO 0
75 #define S_IFLNK 0
76 #define S_IFBLK 0
77 #define S_IFSOCK 0
78 #define S_IXUSR 0
79 #define S_IXGRP 0
80 #define S_IXOTH 0
81
82 #if 0
83 #define S_ISLNK(x) 0
84 #define S_ISBLK(x) 0
85 #define S_ISCHR(x) 0
86 #define S_ISFIFO(x) 0
87 #define S_ISSOCK(x) 0
88 #else
89 #define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFFIFO)
90 #define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
91 #define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
92 #define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK)
93 #define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK)
94 #define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR)
95 #define S_ISBLK(mode) (((mode) & S_IFMT) == S_IFBLK)
96 #endif
97
98
99 #define F_OK 0
100 #define R_OK 4
101 #define W_OK 2
102 #define X_OK 1
103
104 #ifndef STDIN_FILENO
105 #define STDIN_FILENO 0
106 #endif
107
108 #ifndef STDOUT_FILENO
109 #define STDOUT_FILENO 1
110 #endif
111
112 #ifndef STDERR_FILENO
113 #define STDERR_FILENO 2
114 #endif
115
116 #if _MSC_VER < 1600
117 #define ENOTSUP ENOSYS
118 #endif
119 typedef unsigned int gid_t;
120 typedef unsigned int uid_t;
121
122 #if defined(__MINGW64__) && defined(_WIN64)
123 /* MINGW_EXTENSION */
124 typedef long long int pid_t;
125 /* "long long int" is an alternative to __int64 */
126 #else
127 typedef int mode_t;
128 typedef int pid_t;
129 #endif
130
131
132 #define getgroups(x,y) 0
133
geteuid()134 static uid_t geteuid() {
135 return -2;
136 }
137
getuid()138 static uid_t getuid() {
139 return -2;
140 }
141
readlink(const char * __path,char * __buf,int __buflen)142 static int readlink(const char *__path, char *__buf, int __buflen)
143 {
144 if (!__path) {
145 errno = EINVAL;
146 return -1;
147 }
148 if ( (__buflen < 0) || ((int)strlen(__path)>(__buflen-1)) )
149 {
150 errno = ENAMETOOLONG;
151 return -1;
152 }
153 if (access(__path, R_OK) == 0) {
154 /* ok, copy to buf */
155 strncpy(__buf,__path,__buflen);
156 errno = 0;
157 return 0;
158 }
159 errno = ENOENT;
160 return -1;
161 }
162
163
164 #ifdef __cplusplus
165 extern "C" {
166
167 #if 0
168 int setenv(const char *name, const char *value, int overwrite);
169 int unsetenv (const char *name);
170 #endif
171
172 }
173 #endif /* __cplusplus */
174
175
sleep(unsigned int sec)176 static int sleep(unsigned int sec) {
177 Sleep(sec*1000);
178 return 0;
179 }
180
181 #endif
182