File indexing completed on 2024-04-28 16:22:08

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