|
| 1 | +#include <winsock2.h> |
| 2 | + |
| 3 | +/* |
| 4 | + * things that are not available in header files |
| 5 | + */ |
| 6 | + |
| 7 | +typedef int pid_t; |
| 8 | +#define hstrerror strerror |
| 9 | + |
| 10 | +#define S_IFLNK 0120000 /* Symbolic link */ |
| 11 | +#define S_ISLNK(x) (((x) & S_IFMT) == S_IFLNK) |
| 12 | +#define S_ISSOCK(x) 0 |
| 13 | +#define S_IRGRP 0 |
| 14 | +#define S_IWGRP 0 |
| 15 | +#define S_IXGRP 0 |
| 16 | +#define S_ISGID 0 |
| 17 | +#define S_IROTH 0 |
| 18 | +#define S_IXOTH 0 |
| 19 | + |
| 20 | +#define WIFEXITED(x) ((unsigned)(x) < 259) /* STILL_ACTIVE */ |
| 21 | +#define WEXITSTATUS(x) ((x) & 0xff) |
| 22 | +#define WIFSIGNALED(x) ((unsigned)(x) > 259) |
| 23 | + |
| 24 | +#define SIGKILL 0 |
| 25 | +#define SIGCHLD 0 |
| 26 | +#define SIGPIPE 0 |
| 27 | +#define SIGHUP 0 |
| 28 | +#define SIGQUIT 0 |
| 29 | +#define SIGALRM 100 |
| 30 | + |
| 31 | +#define F_GETFD 1 |
| 32 | +#define F_SETFD 2 |
| 33 | +#define FD_CLOEXEC 0x1 |
| 34 | + |
| 35 | +struct passwd { |
| 36 | + char *pw_name; |
| 37 | + char *pw_gecos; |
| 38 | + char *pw_dir; |
| 39 | +}; |
| 40 | + |
| 41 | +struct pollfd { |
| 42 | + int fd; /* file descriptor */ |
| 43 | + short events; /* requested events */ |
| 44 | + short revents; /* returned events */ |
| 45 | +}; |
| 46 | +#define POLLIN 1 |
| 47 | +#define POLLHUP 2 |
| 48 | + |
| 49 | +typedef void (__cdecl *sig_handler_t)(int); |
| 50 | +struct sigaction { |
| 51 | + sig_handler_t sa_handler; |
| 52 | + unsigned sa_flags; |
| 53 | +}; |
| 54 | +#define sigemptyset(x) (void)0 |
| 55 | +#define SA_RESTART 0 |
| 56 | + |
| 57 | +struct itimerval { |
| 58 | + struct timeval it_value, it_interval; |
| 59 | +}; |
| 60 | +#define ITIMER_REAL 0 |
| 61 | + |
| 62 | +#define st_blocks st_size/512 /* will be cleaned up later */ |
| 63 | +#define lstat stat |
| 64 | + |
| 65 | +/* |
| 66 | + * trivial stubs |
| 67 | + */ |
| 68 | + |
| 69 | +static inline int readlink(const char *path, char *buf, size_t bufsiz) |
| 70 | +{ errno = ENOSYS; return -1; } |
| 71 | +static inline int symlink(const char *oldpath, const char *newpath) |
| 72 | +{ errno = ENOSYS; return -1; } |
| 73 | +static inline int link(const char *oldpath, const char *newpath) |
| 74 | +{ errno = ENOSYS; return -1; } |
| 75 | +static inline int fchmod(int fildes, mode_t mode) |
| 76 | +{ errno = ENOSYS; return -1; } |
| 77 | +static inline int fork(void) |
| 78 | +{ errno = ENOSYS; return -1; } |
| 79 | +static inline unsigned int alarm(unsigned int seconds) |
| 80 | +{ return 0; } |
| 81 | +static inline int fsync(int fd) |
| 82 | +{ return 0; } |
| 83 | +static inline int getppid(void) |
| 84 | +{ return 1; } |
| 85 | +static inline void sync(void) |
| 86 | +{} |
| 87 | +static inline int getuid() |
| 88 | +{ return 1; } |
| 89 | +static inline struct passwd *getpwnam(const char *name) |
| 90 | +{ return NULL; } |
| 91 | +static inline int fcntl(int fd, int cmd, long arg) |
| 92 | +{ |
| 93 | + if (cmd == F_GETFD || cmd == F_SETFD) |
| 94 | + return 0; |
| 95 | + errno = EINVAL; |
| 96 | + return -1; |
| 97 | +} |
| 98 | + |
| 99 | +/* |
| 100 | + * simple adaptors |
| 101 | + */ |
| 102 | + |
| 103 | +static inline int mingw_mkdir(const char *path, int mode) |
| 104 | +{ |
| 105 | + return mkdir(path); |
| 106 | +} |
| 107 | +#define mkdir mingw_mkdir |
| 108 | + |
| 109 | +static inline int waitpid(pid_t pid, unsigned *status, unsigned options) |
| 110 | +{ |
| 111 | + if (options == 0) |
| 112 | + return _cwait(status, pid, 0); |
| 113 | + errno = EINVAL; |
| 114 | + return -1; |
| 115 | +} |
| 116 | + |
| 117 | + |
| 118 | +static inline int pipe(int filedes[2]) |
| 119 | +{ return _pipe(filedes, 8192, 0); } |
| 120 | + |
| 121 | +/* |
| 122 | + * implementations of missing functions |
| 123 | + */ |
| 124 | + |
| 125 | +unsigned int sleep (unsigned int seconds); |
| 126 | +int mkstemp(char *template); |
| 127 | +int gettimeofday(struct timeval *tv, void *tz); |
| 128 | +int poll(struct pollfd *ufds, unsigned int nfds, int timeout); |
| 129 | +struct tm *gmtime_r(const time_t *timep, struct tm *result); |
| 130 | +struct tm *localtime_r(const time_t *timep, struct tm *result); |
| 131 | +int getpagesize(void); /* defined in MinGW's libgcc.a */ |
| 132 | +struct passwd *getpwuid(int uid); |
| 133 | +int setitimer(int type, struct itimerval *in, struct itimerval *out); |
| 134 | +int sigaction(int sig, struct sigaction *in, struct sigaction *out); |
0 commit comments