File indexing completed on 2024-04-28 15:50:13
0001 /* 0002 * SPDX-License-Identifier: GPL-3.0-or-later 0003 */ 0004 0005 #ifndef QUIRK_UNISTD_H 0006 #define QUIRK_UNISTD_H 0007 0008 #ifndef _MSC_VER 0009 #include <unistd.h> 0010 #else 0011 0012 #pragma message("winquirk: no unistd.h!") 0013 0014 #include <winsock2.h> 0015 #include <ws2tcpip.h> 0016 #include <windows.h> 0017 #include <direct.h> 0018 #include <errno.h> 0019 #include <fcntl.h> 0020 #include <io.h> 0021 #include <stdio.h> 0022 #include <stdlib.h> 0023 #include <string.h> 0024 #include <process.h> 0025 0026 #include <windef.h> 0027 #include <winbase.h> 0028 #include <sys/types.h> 0029 #include <sys/stat.h> 0030 0031 #define getpid _getpid 0032 #define popen _popen 0033 #define pclose _pclose 0034 #define ssize_t SSIZE_T 0035 0036 #if 0 0037 static int gethostname(char *__name, size_t __len) { 0038 DWORD len = __len; 0039 if (0==GetComputerNameA(__name, &len)) 0040 return -1; 0041 return 0; 0042 } 0043 #endif 0044 0045 0046 #define environ _environ 0047 0048 /* 0049 #define _IFMT 0170000 // type of file 0050 #define _IFDIR 0040000 // directory 0051 #define S_ISDIR(m) (((m)&_IFMT) == _IFDIR) 0052 */ 0053 0054 #define S_ISUID 0004000 0055 #define S_IRWXU 0000700 0056 #define S_IRWXG 0000070 0057 #define S_IRWXO 0000007 0058 #define S_ISGID 0002000 0059 #define S_ISVTX 0001000 0060 0061 #define S_IRUSR 0000400 0062 #define S_IWUSR 0000200 0063 0064 #define S_IRGRP 0000040 0065 #define S_IWGRP 0000020 0066 0067 #define S_IROTH 0000004 0068 #define S_IWOTH 0000002 0069 0070 #define PATH_SEPARATOR '\\' 0071 0072 #if defined(_MSC_VER) && !defined(S_IREAD) 0073 # define S_IFMT _S_IFMT /* File type mask */ 0074 # define S_IFDIR _S_IFDIR /* Directory */ 0075 # define S_IFCHR _S_IFCHR /* Character device */ 0076 # define S_IFFIFO _S_IFFIFO /* Pipe */ 0077 # define S_IFREG _S_IFREG /* Regular file */ 0078 # define S_IREAD _S_IREAD /* Read permission */ 0079 # define S_IWRITE _S_IWRITE /* Write permission */ 0080 # define S_IEXEC _S_IEXEC /* Execute permission */ 0081 #endif 0082 0083 #define S_IFFIFO 0 0084 #define S_IFLNK 0 0085 #define S_IFBLK 0 0086 #define S_IFSOCK 0 0087 #define S_IXUSR 0 0088 #define S_IXGRP 0 0089 #define S_IXOTH 0 0090 0091 #if 0 0092 #define S_ISLNK(x) 0 0093 #define S_ISBLK(x) 0 0094 #define S_ISCHR(x) 0 0095 #define S_ISFIFO(x) 0 0096 #define S_ISSOCK(x) 0 0097 #else 0098 #define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFFIFO) 0099 #define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) 0100 #define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG) 0101 #define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK) 0102 #define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK) 0103 #define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR) 0104 #define S_ISBLK(mode) (((mode) & S_IFMT) == S_IFBLK) 0105 #endif 0106 0107 0108 #define F_OK 0 0109 #define R_OK 4 0110 #define W_OK 2 0111 #define X_OK 1 0112 0113 #ifndef STDIN_FILENO 0114 #define STDIN_FILENO 0 0115 #endif 0116 0117 #ifndef STDOUT_FILENO 0118 #define STDOUT_FILENO 1 0119 #endif 0120 0121 #ifndef STDERR_FILENO 0122 #define STDERR_FILENO 2 0123 #endif 0124 0125 #if defined _MSC_VER 0126 #if _MSC_VER < 1600 0127 #define ENOTSUP ENOSYS 0128 #endif 0129 #endif 0130 typedef unsigned int gid_t; 0131 typedef unsigned int uid_t; 0132 0133 #if defined(__MINGW64__) && defined(_WIN64) 0134 /* MINGW_EXTENSION */ 0135 typedef long long int pid_t; 0136 /* "long long int" is an alternative to __int64 */ 0137 #else 0138 typedef int mode_t; 0139 typedef int pid_t; 0140 #endif 0141 0142 0143 #define getgroups(x,y) 0 0144 0145 static uid_t geteuid() { 0146 return -2; 0147 } 0148 0149 static uid_t getuid() { 0150 return -2; 0151 } 0152 0153 static int readlink(const char *__path, char *__buf, int __buflen) 0154 { 0155 if (!__path) { 0156 errno = EINVAL; 0157 return -1; 0158 } 0159 if ( (__buflen < 0) || ((int)strlen(__path)>(__buflen-1)) ) 0160 { 0161 errno = ENAMETOOLONG; 0162 return -1; 0163 } 0164 if (access(__path, R_OK) == 0) { 0165 /* ok, copy to buf */ 0166 strncpy(__buf,__path,__buflen); 0167 errno = 0; 0168 return 0; 0169 } 0170 errno = ENOENT; 0171 return -1; 0172 } 0173 0174 0175 #ifdef __cplusplus 0176 extern "C" { 0177 0178 #if 0 0179 int setenv(const char *name, const char *value, int overwrite); 0180 int unsetenv (const char *name); 0181 #endif 0182 0183 } 0184 #endif /* __cplusplus */ 0185 0186 0187 static int sleep(unsigned int sec) { 0188 Sleep(sec*1000); 0189 return 0; 0190 } 0191 0192 #endif 0193 #endif