summaryrefslogtreecommitdiff
path: root/jni/ruby/include/ruby/win32.h
diff options
context:
space:
mode:
authorJari Vetoniemi <jari.vetoniemi@indooratlas.com>2020-03-16 18:49:26 +0900
committerJari Vetoniemi <jari.vetoniemi@indooratlas.com>2020-03-30 00:39:06 +0900
commitfcbf63e62c627deae76c1b8cb8c0876c536ed811 (patch)
tree64cb17de3f41a2b6fef2368028fbd00349946994 /jni/ruby/include/ruby/win32.h
Fresh start
Diffstat (limited to 'jni/ruby/include/ruby/win32.h')
-rw-r--r--jni/ruby/include/ruby/win32.h842
1 files changed, 842 insertions, 0 deletions
diff --git a/jni/ruby/include/ruby/win32.h b/jni/ruby/include/ruby/win32.h
new file mode 100644
index 0000000..4b93862
--- /dev/null
+++ b/jni/ruby/include/ruby/win32.h
@@ -0,0 +1,842 @@
+#ifndef RUBY_WIN32_H
+#define RUBY_WIN32_H 1
+
+#if defined(__cplusplus)
+extern "C" {
+#if 0
+} /* satisfy cc-mode */
+#endif
+#endif
+
+RUBY_SYMBOL_EXPORT_BEGIN
+
+/*
+ * Copyright (c) 1993, Intergraph Corporation
+ *
+ * You may distribute under the terms of either the GNU General Public
+ * License or the Artistic License, as specified in the perl README file.
+ *
+ */
+
+/*
+ * Definitions for NT port of Perl
+ */
+
+
+/*
+ * Ok now we can include the normal include files.
+ */
+
+/* #include <stdarg.h> conflict with varargs.h? */
+#if !defined(WSAAPI)
+#if defined(__cplusplus) && defined(_MSC_VER)
+extern "C++" { /* template without extern "C++" */
+#endif
+#if !defined(_WIN64) && !defined(WIN32)
+#define WIN32
+#endif
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#if !defined(_MSC_VER) || _MSC_VER >= 1400
+#include <iphlpapi.h>
+#endif
+#if defined(__cplusplus) && defined(_MSC_VER)
+}
+#endif
+#endif
+
+/*
+ * We're not using Microsoft's "extensions" to C for
+ * Structured Exception Handling (SEH) so we can nuke these
+ */
+#undef try
+#undef except
+#undef finally
+#undef leave
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <direct.h>
+#include <process.h>
+#include <time.h>
+#if defined(__cplusplus) && defined(_MSC_VER) && _MSC_VER == 1200
+extern "C++" { /* template without extern "C++" */
+#endif
+#include <math.h>
+#if defined(__cplusplus) && defined(_MSC_VER) && _MSC_VER == 1200
+}
+#endif
+#include <signal.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#ifdef HAVE_SYS_UTIME_H
+# include <sys/utime.h>
+#else
+# include <utime.h>
+#endif
+#include <io.h>
+#include <malloc.h>
+#if defined __MINGW32__ || __BORLANDC__ >= 0x0580
+# include <stdint.h>
+#else
+# if !defined(_INTPTR_T_DEFINED)
+# ifdef _WIN64
+typedef __int64 intptr_t;
+# else
+typedef int intptr_t;
+# endif
+# define _INTPTR_T_DEFINED
+# endif
+# if !defined(INTPTR_MAX)
+# ifdef _WIN64
+# define INTPTR_MAX 9223372036854775807I64
+# else
+# define INTPTR_MAX 2147483647
+# endif
+# define INTPTR_MIN (-INTPTR_MAX-1)
+# endif
+# if !defined(_UINTPTR_T_DEFINED)
+# ifdef _WIN64
+typedef unsigned __int64 uintptr_t;
+# else
+typedef unsigned int uintptr_t;
+# endif
+# define _UINTPTR_T_DEFINED
+# endif
+# if !defined(UINTPTR_MAX)
+# ifdef _WIN64
+# define UINTPTR_MAX 18446744073709551615UI64
+# else
+# define UINTPTR_MAX 4294967295U
+# endif
+# endif
+#endif
+#ifndef __MINGW32__
+# define mode_t int
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#define rb_w32_iswinnt() TRUE
+#define rb_w32_iswin95() FALSE
+
+#define WNOHANG -1
+
+typedef int clockid_t;
+#define CLOCK_REALTIME 0
+#define CLOCK_MONOTONIC 1
+
+#undef getc
+#undef putc
+#undef fgetc
+#undef fputc
+#undef getchar
+#undef putchar
+#undef fgetchar
+#undef fputchar
+#undef utime
+#undef lseek
+#undef stat
+#undef fstat
+#define getc(_stream) rb_w32_getc(_stream)
+#define getchar() rb_w32_getc(stdin)
+#define putc(_c, _stream) rb_w32_putc(_c, _stream)
+#define putchar(_c) rb_w32_putc(_c, stdout)
+#ifdef RUBY_EXPORT
+#define fgetc(_stream) getc(_stream)
+#define fputc(_c, _stream) putc(_c, _stream)
+#define fgetchar() getchar()
+#define fputchar(_c) putchar(_c)
+#define utime(_p, _t) rb_w32_utime(_p, _t)
+#define lseek(_f, _o, _w) _lseeki64(_f, _o, _w)
+
+#define pipe(p) rb_w32_pipe(p)
+#define open rb_w32_open
+#define close(h) rb_w32_close(h)
+#define fclose(f) rb_w32_fclose(f)
+#define read(f, b, s) rb_w32_read(f, b, s)
+#define write(f, b, s) rb_w32_write(f, b, s)
+#define getpid() rb_w32_getpid()
+#define getppid() rb_w32_getppid()
+#define sleep(x) rb_w32_Sleep((x)*1000)
+#define Sleep(msec) (void)rb_w32_Sleep(msec)
+#define fstati64(fd,st) rb_w32_fstati64(fd,st)
+#ifdef __BORLANDC__
+#define creat(p, m) _creat(p, m)
+#define eof() _eof()
+#define filelength(h) _filelength(h)
+#define mktemp(t) _mktemp(t)
+#define tell(h) _tell(h)
+#define _open _sopen
+#define sopen _sopen
+#undef fopen
+#define fopen(p, m) rb_w32_fopen(p, m)
+#undef fdopen
+#define fdopen(h, m) rb_w32_fdopen(h, m)
+#undef fsopen
+#define fsopen(p, m, sh) rb_w32_fsopen(p, m, sh)
+#endif /* __BORLANDC__ */
+
+#undef execv
+#define execv(path,argv) rb_w32_aspawn(P_OVERLAY,path,argv)
+#if !defined(__BORLANDC__)
+#undef isatty
+#define isatty(h) rb_w32_isatty(h)
+#endif /* __BORLANDC__ */
+
+#undef mkdir
+#define mkdir(p, m) rb_w32_mkdir(p, m)
+#undef rmdir
+#define rmdir(p) rb_w32_rmdir(p)
+#undef unlink
+#define unlink(p) rb_w32_unlink(p)
+#endif /* RUBY_EXPORT */
+
+#if SIZEOF_OFF_T == 8
+#define off_t __int64
+#define stat stati64
+#define fstat(fd,st) fstati64(fd,st)
+#if defined(__BORLANDC__)
+#define stati64(path, st) rb_w32_stati64(path, st)
+#elif !defined(_MSC_VER) || RT_VER < 80
+#define stati64 _stati64
+#ifndef _stati64
+#define _stati64(path, st) rb_w32_stati64(path, st)
+#endif
+#else
+#define stati64 _stat64
+#define _stat64(path, st) rb_w32_stati64(path, st)
+#endif
+#else
+#define stat(path,st) rb_w32_stat(path,st)
+#define fstat(fd,st) rb_w32_fstat(fd,st)
+extern int rb_w32_stat(const char *, struct stat *);
+extern int rb_w32_fstat(int, struct stat *);
+#endif
+#define access(path,mode) rb_w32_access(path,mode)
+
+#define strcasecmp _stricmp
+#define strncasecmp _strnicmp
+#define fsync _commit
+
+struct timezone;
+
+#ifdef __MINGW32__
+#undef isascii
+#define isascii __isascii
+#endif
+
+struct iovec {
+ void *iov_base;
+ size_t iov_len;
+};
+struct msghdr {
+ void *msg_name;
+ int msg_namelen;
+ struct iovec *msg_iov;
+ int msg_iovlen;
+ void *msg_control;
+ int msg_controllen;
+ int msg_flags;
+};
+
+/* for getifaddrs() and others */
+struct ifaddrs {
+ struct ifaddrs *ifa_next;
+ char *ifa_name;
+ u_int ifa_flags;
+ struct sockaddr *ifa_addr;
+ struct sockaddr *ifa_netmask;
+ struct sockaddr *ifa_broadaddr;
+ struct sockaddr *ifa_dstaddr;
+ void *ifa_data;
+};
+#ifdef IF_NAMESIZE
+#define IFNAMSIZ IF_NAMESIZE
+#else
+#define IFNAMSIZ 256
+#endif
+#ifdef IFF_POINTTOPOINT
+#define IFF_POINTOPOINT IFF_POINTTOPOINT
+#endif
+
+extern DWORD rb_w32_osid(void);
+extern rb_pid_t rb_w32_pipe_exec(const char *, const char *, int, int *, int *);
+extern int flock(int fd, int oper);
+extern int rb_w32_io_cancelable_p(int);
+extern int rb_w32_is_socket(int);
+extern int WSAAPI rb_w32_accept(int, struct sockaddr *, int *);
+extern int WSAAPI rb_w32_bind(int, const struct sockaddr *, int);
+extern int WSAAPI rb_w32_connect(int, const struct sockaddr *, int);
+extern void rb_w32_fdset(int, fd_set*);
+extern void rb_w32_fdclr(int, fd_set*);
+extern int rb_w32_fdisset(int, fd_set*);
+extern int WSAAPI rb_w32_select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
+extern int WSAAPI rb_w32_getpeername(int, struct sockaddr *, int *);
+extern int WSAAPI rb_w32_getsockname(int, struct sockaddr *, int *);
+extern int WSAAPI rb_w32_getsockopt(int, int, int, char *, int *);
+extern int WSAAPI rb_w32_ioctlsocket(int, long, u_long *);
+extern int WSAAPI rb_w32_listen(int, int);
+extern int WSAAPI rb_w32_recv(int, char *, int, int);
+extern int WSAAPI rb_w32_recvfrom(int, char *, int, int, struct sockaddr *, int *);
+extern int WSAAPI rb_w32_send(int, const char *, int, int);
+extern int WSAAPI rb_w32_sendto(int, const char *, int, int, const struct sockaddr *, int);
+extern int recvmsg(int, struct msghdr *, int);
+extern int sendmsg(int, const struct msghdr *, int);
+extern int WSAAPI rb_w32_setsockopt(int, int, int, const char *, int);
+extern int WSAAPI rb_w32_shutdown(int, int);
+extern int WSAAPI rb_w32_socket(int, int, int);
+extern SOCKET rb_w32_get_osfhandle(int);
+extern struct hostent *WSAAPI rb_w32_gethostbyaddr(const char *, int, int);
+extern struct hostent *WSAAPI rb_w32_gethostbyname(const char *);
+extern int WSAAPI rb_w32_gethostname(char *, int);
+extern struct protoent *WSAAPI rb_w32_getprotobyname(const char *);
+extern struct protoent *WSAAPI rb_w32_getprotobynumber(int);
+extern struct servent *WSAAPI rb_w32_getservbyname(const char *, const char *);
+extern struct servent *WSAAPI rb_w32_getservbyport(int, const char *);
+extern int socketpair(int, int, int, int *);
+extern int getifaddrs(struct ifaddrs **);
+extern void freeifaddrs(struct ifaddrs *);
+extern char * rb_w32_getcwd(char *, int);
+extern char * rb_w32_ugetenv(const char *);
+extern char * rb_w32_getenv(const char *);
+extern int rb_w32_rename(const char *, const char *);
+extern int rb_w32_urename(const char *, const char *);
+extern char **rb_w32_get_environ(void);
+extern void rb_w32_free_environ(char **);
+extern int rb_w32_map_errno(DWORD);
+extern const char *WSAAPI rb_w32_inet_ntop(int,const void *,char *,size_t);
+extern int WSAAPI rb_w32_inet_pton(int,const char *,void *);
+extern DWORD rb_w32_osver(void);
+
+extern int chown(const char *, int, int);
+extern int rb_w32_uchown(const char *, int, int);
+extern int link(const char *, const char *);
+extern int rb_w32_ulink(const char *, const char *);
+extern int gettimeofday(struct timeval *, struct timezone *);
+extern int clock_gettime(clockid_t, struct timespec *);
+extern int clock_getres(clockid_t, struct timespec *);
+extern rb_pid_t waitpid (rb_pid_t, int *, int);
+extern rb_pid_t rb_w32_spawn(int, const char *, const char*);
+extern rb_pid_t rb_w32_aspawn(int, const char *, char *const *);
+extern rb_pid_t rb_w32_aspawn_flags(int, const char *, char *const *, DWORD);
+extern rb_pid_t rb_w32_uspawn(int, const char *, const char*);
+extern rb_pid_t rb_w32_uaspawn(int, const char *, char *const *);
+extern rb_pid_t rb_w32_uaspawn_flags(int, const char *, char *const *, DWORD);
+extern int kill(int, int);
+extern int fcntl(int, int, ...);
+extern int rb_w32_set_nonblock(int);
+extern rb_pid_t rb_w32_getpid(void);
+extern rb_pid_t rb_w32_getppid(void);
+#if !defined(__BORLANDC__)
+extern int rb_w32_isatty(int);
+#endif
+extern int rb_w32_uchdir(const char *);
+extern int rb_w32_mkdir(const char *, int);
+extern int rb_w32_umkdir(const char *, int);
+extern int rb_w32_rmdir(const char *);
+extern int rb_w32_urmdir(const char *);
+extern int rb_w32_unlink(const char *);
+extern int rb_w32_uunlink(const char *);
+extern int rb_w32_uchmod(const char *, int);
+extern int rb_w32_stati64(const char *, struct stati64 *);
+extern int rb_w32_ustati64(const char *, struct stati64 *);
+extern int rb_w32_access(const char *, int);
+extern int rb_w32_uaccess(const char *, int);
+extern char rb_w32_fd_is_text(int);
+extern int rb_w32_fstati64(int, struct stati64 *);
+extern int rb_w32_dup2(int, int);
+
+#ifdef __BORLANDC__
+extern off_t _lseeki64(int, off_t, int);
+extern FILE *rb_w32_fopen(const char *, const char *);
+extern FILE *rb_w32_fdopen(int, const char *);
+extern FILE *rb_w32_fsopen(const char *, const char *, int);
+#endif
+
+#include <float.h>
+
+#if defined _MSC_VER && _MSC_VER >= 1800 && defined INFINITY
+#pragma warning(push)
+#pragma warning(disable:4756)
+static inline float
+rb_infinity_float(void)
+{
+ return INFINITY;
+}
+#pragma warning(pop)
+#undef INFINITY
+#define INFINITY rb_infinity_float()
+#endif
+
+#if !defined __MINGW32__ || defined __NO_ISOCEXT
+#ifndef isnan
+#define isnan(x) _isnan(x)
+#endif
+static inline int
+finite(double x)
+{
+ return _finite(x);
+}
+#ifndef copysign
+#define copysign(a, b) _copysign(a, b)
+#endif
+static inline double
+scalb(double a, long b)
+{
+ return _scalb(a, b);
+}
+#else
+__declspec(dllimport) extern int finite(double);
+#endif
+
+#if !defined S_IFIFO && defined _S_IFIFO
+#define S_IFIFO _S_IFIFO
+#endif
+
+#if 0 && defined __BORLANDC__
+#undef S_ISDIR
+#undef S_ISFIFO
+#undef S_ISBLK
+#undef S_ISCHR
+#undef S_ISREG
+#define S_ISDIR(m) (((unsigned short)(m) & S_IFMT) == S_IFDIR)
+#define S_ISFIFO(m) (((unsigned short)(m) & S_IFMT) == S_IFIFO)
+#define S_ISBLK(m) (((unsigned short)(m) & S_IFMT) == S_IFBLK)
+#define S_ISCHR(m) (((unsigned short)(m) & S_IFMT) == S_IFCHR)
+#define S_ISREG(m) (((unsigned short)(m) & S_IFMT) == S_IFREG)
+#endif
+
+#if !defined S_IRUSR && !defined __MINGW32__
+#define S_IRUSR 0400
+#endif
+#ifndef S_IRGRP
+#define S_IRGRP 0040
+#endif
+#ifndef S_IROTH
+#define S_IROTH 0004
+#endif
+
+#if !defined S_IWUSR && !defined __MINGW32__
+#define S_IWUSR 0200
+#endif
+#ifndef S_IWGRP
+#define S_IWGRP 0020
+#endif
+#ifndef S_IWOTH
+#define S_IWOTH 0002
+#endif
+
+#if !defined S_IXUSR && !defined __MINGW32__
+#define S_IXUSR 0100
+#endif
+#ifndef S_IXGRP
+#define S_IXGRP 0010
+#endif
+#ifndef S_IXOTH
+#define S_IXOTH 0001
+#endif
+
+/*
+ * define this so we can do inplace editing
+ */
+
+#define SUFFIX
+
+extern int rb_w32_ftruncate(int fd, off_t length);
+extern int rb_w32_truncate(const char *path, off_t length);
+
+#undef HAVE_FTRUNCATE
+#define HAVE_FTRUNCATE 1
+#if defined HAVE_FTRUNCATE64
+#define ftruncate ftruncate64
+#else
+#define ftruncate rb_w32_ftruncate
+#endif
+
+#undef HAVE_TRUNCATE
+#define HAVE_TRUNCATE 1
+#if defined HAVE_TRUNCATE64
+#define truncate truncate64
+#else
+#define truncate rb_w32_truncate
+#endif
+
+#if defined(_MSC_VER) && _MSC_VER >= 1400 && _MSC_VER < 1800
+#define strtoll _strtoi64
+#define strtoull _strtoui64
+#endif
+
+/*
+ * stubs
+ */
+extern int ioctl (int, int, ...);
+extern rb_uid_t getuid (void);
+extern rb_uid_t geteuid (void);
+extern rb_gid_t getgid (void);
+extern rb_gid_t getegid (void);
+extern int setuid (rb_uid_t);
+extern int setgid (rb_gid_t);
+
+extern int fstati64(int, struct stati64 *);
+
+extern char *rb_w32_strerror(int);
+
+#ifdef RUBY_EXPORT
+#define strerror(e) rb_w32_strerror(e)
+#endif
+
+#define PIPE_BUF 1024
+
+#define LOCK_SH 1
+#define LOCK_EX 2
+#define LOCK_NB 4
+#define LOCK_UN 8
+
+
+#ifndef SIGINT
+#define SIGINT 2
+#endif
+#ifndef SIGKILL
+#define SIGKILL 9
+#endif
+
+
+/* #undef va_start */
+/* #undef va_end */
+
+/* winsock error map */
+#include <errno.h>
+
+#ifndef EWOULDBLOCK
+# define EWOULDBLOCK WSAEWOULDBLOCK
+#endif
+#ifndef EINPROGRESS
+# define EINPROGRESS WSAEINPROGRESS
+#endif
+#ifndef EALREADY
+# define EALREADY WSAEALREADY
+#endif
+#ifndef ENOTSOCK
+# define ENOTSOCK WSAENOTSOCK
+#endif
+#ifndef EDESTADDRREQ
+# define EDESTADDRREQ WSAEDESTADDRREQ
+#endif
+#ifndef EMSGSIZE
+# define EMSGSIZE WSAEMSGSIZE
+#endif
+#ifndef EPROTOTYPE
+# define EPROTOTYPE WSAEPROTOTYPE
+#endif
+#ifndef ENOPROTOOPT
+# define ENOPROTOOPT WSAENOPROTOOPT
+#endif
+#ifndef EPROTONOSUPPORT
+# define EPROTONOSUPPORT WSAEPROTONOSUPPORT
+#endif
+#ifndef ESOCKTNOSUPPORT
+# define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
+#endif
+#ifndef EOPNOTSUPP
+# define EOPNOTSUPP WSAEOPNOTSUPP
+#endif
+#ifndef EPFNOSUPPORT
+# define EPFNOSUPPORT WSAEPFNOSUPPORT
+#endif
+#ifndef EAFNOSUPPORT
+# define EAFNOSUPPORT WSAEAFNOSUPPORT
+#endif
+#ifndef EADDRINUSE
+# define EADDRINUSE WSAEADDRINUSE
+#endif
+#ifndef EADDRNOTAVAIL
+# define EADDRNOTAVAIL WSAEADDRNOTAVAIL
+#endif
+#ifndef ENETDOWN
+# define ENETDOWN WSAENETDOWN
+#endif
+#ifndef ENETUNREACH
+# define ENETUNREACH WSAENETUNREACH
+#endif
+#ifndef ENETRESET
+# define ENETRESET WSAENETRESET
+#endif
+#ifndef ECONNABORTED
+# define ECONNABORTED WSAECONNABORTED
+#endif
+#ifndef ECONNRESET
+# define ECONNRESET WSAECONNRESET
+#endif
+#ifndef ENOBUFS
+# define ENOBUFS WSAENOBUFS
+#endif
+#ifndef EISCONN
+# define EISCONN WSAEISCONN
+#endif
+#ifndef ENOTCONN
+# define ENOTCONN WSAENOTCONN
+#endif
+#ifndef ESHUTDOWN
+# define ESHUTDOWN WSAESHUTDOWN
+#endif
+#ifndef ETOOMANYREFS
+# define ETOOMANYREFS WSAETOOMANYREFS
+#endif
+#ifndef ETIMEDOUT
+# define ETIMEDOUT WSAETIMEDOUT
+#endif
+#ifndef ECONNREFUSED
+# define ECONNREFUSED WSAECONNREFUSED
+#endif
+#ifndef ELOOP
+# define ELOOP WSAELOOP
+#endif
+/*#define ENAMETOOLONG WSAENAMETOOLONG*/
+#ifndef EHOSTDOWN
+# define EHOSTDOWN WSAEHOSTDOWN
+#endif
+#ifndef EHOSTUNREACH
+# define EHOSTUNREACH WSAEHOSTUNREACH
+#endif
+/*#define ENOTEMPTY WSAENOTEMPTY*/
+#ifndef EPROCLIM
+# define EPROCLIM WSAEPROCLIM
+#endif
+#ifndef EUSERS
+# define EUSERS WSAEUSERS
+#endif
+#ifndef EDQUOT
+# define EDQUOT WSAEDQUOT
+#endif
+#ifndef ESTALE
+# define ESTALE WSAESTALE
+#endif
+#ifndef EREMOTE
+# define EREMOTE WSAEREMOTE
+#endif
+
+#define F_DUPFD 0
+#if 0
+#define F_GETFD 1
+#define F_SETFD 2
+#define F_GETFL 3
+#endif
+#define F_SETFL 4
+#if 0
+#define FD_CLOEXEC 1 /* F_GETFD, F_SETFD */
+#endif
+#define O_NONBLOCK 1
+
+#undef FD_SET
+#define FD_SET(fd, set) do {\
+ unsigned int i;\
+ SOCKET s = _get_osfhandle(fd);\
+\
+ for (i = 0; i < (set)->fd_count; i++) {\
+ if ((set)->fd_array[i] == s) {\
+ break;\
+ }\
+ }\
+ if (i == (set)->fd_count) {\
+ if ((set)->fd_count < FD_SETSIZE) {\
+ (set)->fd_array[i] = s;\
+ (set)->fd_count++;\
+ }\
+ }\
+} while(0)
+
+#undef FD_CLR
+#define FD_CLR(f, s) rb_w32_fdclr(f, s)
+
+#undef FD_ISSET
+#define FD_ISSET(f, s) rb_w32_fdisset(f, s)
+
+#ifdef RUBY_EXPORT
+#undef inet_ntop
+#define inet_ntop(f,a,n,l) rb_w32_inet_ntop(f,a,n,l)
+
+#undef inet_pton
+#define inet_pton(f,s,d) rb_w32_inet_pton(f,s,d)
+
+#undef accept
+#define accept(s, a, l) rb_w32_accept(s, a, l)
+
+#undef bind
+#define bind(s, a, l) rb_w32_bind(s, a, l)
+
+#undef connect
+#define connect(s, a, l) rb_w32_connect(s, a, l)
+
+#undef select
+#define select(n, r, w, e, t) rb_w32_select(n, r, w, e, t)
+
+#undef getpeername
+#define getpeername(s, a, l) rb_w32_getpeername(s, a, l)
+
+#undef getsockname
+#define getsockname(s, a, l) rb_w32_getsockname(s, a, l)
+
+#undef getsockopt
+#define getsockopt(s, v, n, o, l) rb_w32_getsockopt(s, v, n, o, l)
+
+#undef ioctlsocket
+#define ioctlsocket(s, c, a) rb_w32_ioctlsocket(s, c, a)
+
+#undef listen
+#define listen(s, b) rb_w32_listen(s, b)
+
+#undef recv
+#define recv(s, b, l, f) rb_w32_recv(s, b, l, f)
+
+#undef recvfrom
+#define recvfrom(s, b, l, f, fr, frl) rb_w32_recvfrom(s, b, l, f, fr, frl)
+
+#undef send
+#define send(s, b, l, f) rb_w32_send(s, b, l, f)
+
+#undef sendto
+#define sendto(s, b, l, f, t, tl) rb_w32_sendto(s, b, l, f, t, tl)
+
+#undef setsockopt
+#define setsockopt(s, v, n, o, l) rb_w32_setsockopt(s, v, n, o, l)
+
+#undef shutdown
+#define shutdown(s, h) rb_w32_shutdown(s, h)
+
+#undef socket
+#define socket(s, t, p) rb_w32_socket(s, t, p)
+
+#undef gethostbyaddr
+#define gethostbyaddr(a, l, t) rb_w32_gethostbyaddr(a, l, t)
+
+#undef gethostbyname
+#define gethostbyname(n) rb_w32_gethostbyname(n)
+
+#undef gethostname
+#define gethostname(n, l) rb_w32_gethostname(n, l)
+
+#undef getprotobyname
+#define getprotobyname(n) rb_w32_getprotobyname(n)
+
+#undef getprotobynumber
+#define getprotobynumber(n) rb_w32_getprotobynumber(n)
+
+#undef getservbyname
+#define getservbyname(n, p) rb_w32_getservbyname(n, p)
+
+#undef getservbyport
+#define getservbyport(p, pr) rb_w32_getservbyport(p, pr)
+
+#undef get_osfhandle
+#define get_osfhandle(h) rb_w32_get_osfhandle(h)
+
+#undef getcwd
+#define getcwd(b, s) rb_w32_getcwd(b, s)
+
+#undef getenv
+#define getenv(n) rb_w32_getenv(n)
+
+#undef rename
+#define rename(o, n) rb_w32_rename(o, n)
+
+#undef times
+#define times(t) rb_w32_times(t)
+
+#undef dup2
+#define dup2(o, n) rb_w32_dup2(o, n)
+#endif
+
+struct tms {
+ long tms_utime;
+ long tms_stime;
+ long tms_cutime;
+ long tms_cstime;
+};
+
+int rb_w32_times(struct tms *);
+
+struct tm *gmtime_r(const time_t *, struct tm *);
+struct tm *localtime_r(const time_t *, struct tm *);
+
+/* thread stuff */
+int rb_w32_sleep(unsigned long msec);
+int rb_w32_putc(int, FILE*);
+int rb_w32_getc(FILE*);
+int rb_w32_open(const char *, int, ...);
+int rb_w32_uopen(const char *, int, ...);
+int rb_w32_wopen(const WCHAR *, int, ...);
+int rb_w32_close(int);
+int rb_w32_fclose(FILE*);
+int rb_w32_pipe(int[2]);
+ssize_t rb_w32_read(int, void *, size_t);
+ssize_t rb_w32_write(int, const void *, size_t);
+int rb_w32_utime(const char *, const struct utimbuf *);
+int rb_w32_uutime(const char *, const struct utimbuf *);
+long rb_w32_write_console(uintptr_t, int); /* use uintptr_t instead of VALUE because it's not defined yet here */
+int WINAPI rb_w32_Sleep(unsigned long msec);
+int rb_w32_wait_events_blocking(HANDLE *events, int num, DWORD timeout);
+int rb_w32_time_subtract(struct timeval *rest, const struct timeval *wait);
+int rb_w32_wrap_io_handle(HANDLE, int);
+int rb_w32_unwrap_io_handle(int);
+WCHAR *rb_w32_mbstr_to_wstr(UINT, const char *, int, long *);
+char *rb_w32_wstr_to_mbstr(UINT, const WCHAR *, int, long *);
+
+/*
+== ***CAUTION***
+Since this function is very dangerous, ((*NEVER*))
+* lock any HANDLEs(i.e. Mutex, Semaphore, CriticalSection and so on) or,
+* use anything like rb_thread_call_without_gvl,
+in asynchronous_func_t.
+*/
+typedef uintptr_t (*asynchronous_func_t)(uintptr_t self, int argc, uintptr_t* argv);
+uintptr_t rb_w32_asynchronize(asynchronous_func_t func, uintptr_t self, int argc, uintptr_t* argv, uintptr_t intrval);
+
+RUBY_SYMBOL_EXPORT_END
+
+#ifdef __MINGW_ATTRIB_PURE
+/* License: Ruby's */
+/* get rid of bugs in math.h of mingw */
+#define frexp(_X, _Y) __extension__ ({\
+ int intpart_frexp_bug = intpart_frexp_bug;\
+ double result_frexp_bug = frexp((_X), &intpart_frexp_bug);\
+ *(_Y) = intpart_frexp_bug;\
+ result_frexp_bug;\
+})
+/* License: Ruby's */
+#define modf(_X, _Y) __extension__ ({\
+ double intpart_modf_bug = intpart_modf_bug;\
+ double result_modf_bug = modf((_X), &intpart_modf_bug);\
+ *(_Y) = intpart_modf_bug;\
+ result_modf_bug;\
+})
+#endif
+
+#if defined(__cplusplus)
+#if 0
+{ /* satisfy cc-mode */
+#endif
+} /* extern "C" { */
+#endif
+
+#if defined(__MINGW64__)
+/*
+ * Use powl() instead of broken pow() of x86_64-w64-mingw32.
+ * This workaround will fix test failures in test_bignum.rb,
+ * test_fixnum.rb and test_float.rb etc.
+ */
+static inline double
+rb_w32_pow(double x, double y)
+{
+ return powl(x, y);
+}
+#elif defined(__MINGW64_VERSION_MAJOR)
+double rb_w32_pow(double x, double y);
+#endif
+#if defined(__MINGW64_VERSION_MAJOR) || defined(__MINGW64__)
+#define pow rb_w32_pow
+#endif
+
+#endif /* RUBY_WIN32_H */