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