4#if defined(__cplusplus)
11RUBY_SYMBOL_EXPORT_BEGIN
32#if defined(__cplusplus) && defined(_MSC_VER)
35#if !defined(_WIN64) && !defined(WIN32)
38#if defined(_MSC_VER) && _MSC_VER <= 1200
43#if !defined(_MSC_VER) || _MSC_VER >= 1400
46#if defined(__cplusplus) && defined(_MSC_VER)
66#if defined(__cplusplus) && defined(_MSC_VER) && _MSC_VER == 1200
70#if defined(__cplusplus) && defined(_MSC_VER) && _MSC_VER == 1200
76#ifdef HAVE_SYS_UTIME_H
77# include <sys/utime.h>
83#if defined __MINGW32__
86# if !defined(_INTPTR_T_DEFINED)
88typedef __int64 intptr_t;
92# define _INTPTR_T_DEFINED
94# if !defined(INTPTR_MAX)
96# define INTPTR_MAX 9223372036854775807I64
98# define INTPTR_MAX 2147483647
100# define INTPTR_MIN (-INTPTR_MAX-1)
102# if !defined(_UINTPTR_T_DEFINED)
104typedef unsigned __int64 uintptr_t;
106typedef unsigned int uintptr_t;
108# define _UINTPTR_T_DEFINED
110# if !defined(UINTPTR_MAX)
112# define UINTPTR_MAX 18446744073709551615UI64
114# define UINTPTR_MAX 4294967295U
125#define rb_w32_iswinnt() TRUE
126#define rb_w32_iswin95() FALSE
130#define O_SHARE_DELETE 0x20000000
132typedef int clockid_t;
133#define CLOCK_REALTIME 0
134#define CLOCK_MONOTONIC 1
141#define utime(_p, _t) rb_w32_uutime(_p, _t)
144#define utimes(_p, _t) rb_w32_uutimes(_p, _t)
146#define HAVE_UTIMENSAT 1
148#define utimensat(_d, _p, _t, _f) rb_w32_uutimensat(_d, _p, _t, _f)
149#define lseek(_f, _o, _w) rb_w32_lseek(_f, _o, _w)
151#define pipe(p) rb_w32_pipe(p)
152#define open rb_w32_uopen
153#define close(h) rb_w32_close(h)
154#define fclose(f) rb_w32_fclose(f)
155#define read(f, b, s) rb_w32_read(f, b, s)
156#define write(f, b, s) rb_w32_write(f, b, s)
157#define getpid() rb_w32_getpid()
158#define getppid() rb_w32_getppid()
159#define sleep(x) rb_w32_Sleep((x)*1000)
160#define Sleep(msec) (void)rb_w32_Sleep(msec)
163#define execv(path,argv) rb_w32_uaspawn(P_OVERLAY,path,argv)
165#define isatty(h) rb_w32_isatty(h)
168#define mkdir(p, m) rb_w32_umkdir(p, m)
170#define rmdir(p) rb_w32_urmdir(p)
172#define unlink(p) rb_w32_uunlink(p)
178 unsigned __int64 st_ino;
180 unsigned short st_mode;
196#undef SIZEOF_STRUCT_STAT_ST_INO
197#define SIZEOF_STRUCT_STAT_ST_INO sizeof(unsigned __int64)
198#define HAVE_STRUCT_STAT_ST_INOHIGH
199#define HAVE_STRUCT_STAT_ST_ATIMENSEC
200#define HAVE_STRUCT_STAT_ST_MTIMENSEC
201#define HAVE_STRUCT_STAT_ST_CTIMENSEC
202#define fstat(fd,st) rb_w32_fstati128(fd,st)
203#define stati128(path, st) rb_w32_ustati128(path,st)
204#define lstat(path,st) rb_w32_ulstati128(path,st)
205#define access(path,mode) rb_w32_uaccess(path,mode)
207#define strcasecmp _stricmp
208#define strncasecmp _strnicmp
215#define isascii __isascii
225 struct iovec *msg_iov;
237 struct sockaddr *ifa_addr;
238 struct sockaddr *ifa_netmask;
239 struct sockaddr *ifa_broadaddr;
240 struct sockaddr *ifa_dstaddr;
244#define IFNAMSIZ IF_NAMESIZE
248#ifdef IFF_POINTTOPOINT
249#define IFF_POINTOPOINT IFF_POINTTOPOINT
252extern void rb_w32_sysinit(
int *,
char ***);
253extern DWORD rb_w32_osid(
void);
254extern int flock(
int fd,
int oper);
255extern int rb_w32_io_cancelable_p(
int);
256extern int rb_w32_is_socket(
int);
257extern int WSAAPI rb_w32_accept(
int,
struct sockaddr *,
int *);
258extern int WSAAPI rb_w32_bind(
int,
const struct sockaddr *,
int);
259extern int WSAAPI rb_w32_connect(
int,
const struct sockaddr *,
int);
260extern void rb_w32_fdset(
int,
fd_set*);
261extern void rb_w32_fdclr(
int,
fd_set*);
262extern int rb_w32_fdisset(
int,
fd_set*);
264extern int WSAAPI rb_w32_getpeername(
int,
struct sockaddr *,
int *);
265extern int WSAAPI rb_w32_getsockname(
int,
struct sockaddr *,
int *);
266extern int WSAAPI rb_w32_getsockopt(
int,
int,
int,
char *,
int *);
267extern int WSAAPI rb_w32_ioctlsocket(
int,
long, u_long *);
268extern int WSAAPI rb_w32_listen(
int,
int);
269extern int WSAAPI rb_w32_recv(
int,
char *,
int,
int);
270extern int WSAAPI rb_w32_recvfrom(
int,
char *,
int,
int,
struct sockaddr *,
int *);
271extern int WSAAPI rb_w32_send(
int,
const char *,
int,
int);
272extern int WSAAPI rb_w32_sendto(
int,
const char *,
int,
int,
const struct sockaddr *,
int);
273extern int recvmsg(
int,
struct msghdr *,
int);
274extern int sendmsg(
int,
const struct msghdr *,
int);
275extern int WSAAPI rb_w32_setsockopt(
int,
int,
int,
const char *,
int);
276extern int WSAAPI rb_w32_shutdown(
int,
int);
277extern int WSAAPI rb_w32_socket(
int,
int,
int);
278extern SOCKET rb_w32_get_osfhandle(
int);
279extern struct hostent *WSAAPI rb_w32_gethostbyaddr(
const char *,
int,
int);
280extern struct hostent *WSAAPI rb_w32_gethostbyname(
const char *);
281extern int WSAAPI rb_w32_gethostname(
char *,
int);
282extern struct protoent *WSAAPI rb_w32_getprotobyname(
const char *);
283extern struct protoent *WSAAPI rb_w32_getprotobynumber(
int);
284extern struct servent *WSAAPI rb_w32_getservbyname(
const char *,
const char *);
285extern struct servent *WSAAPI rb_w32_getservbyport(
int,
const char *);
286extern int socketpair(
int,
int,
int,
int *);
287extern int getifaddrs(
struct ifaddrs **);
288extern void freeifaddrs(
struct ifaddrs *);
289extern char * rb_w32_ugetcwd(
char *,
int);
290extern char * rb_w32_ugetenv(
const char *);
291extern int rb_w32_urename(
const char *,
const char *);
292extern char **rb_w32_get_environ(
void);
293extern void rb_w32_free_environ(
char **);
294extern int rb_w32_map_errno(DWORD);
295extern const char *WSAAPI rb_w32_inet_ntop(
int,
const void *,
char *,
size_t);
296extern int WSAAPI rb_w32_inet_pton(
int,
const char *,
void *);
297extern DWORD rb_w32_osver(
void);
299extern int rb_w32_uchown(
const char *,
int,
int);
300extern int rb_w32_ulink(
const char *,
const char *);
301extern ssize_t rb_w32_ureadlink(
const char *,
char *,
size_t);
302extern ssize_t rb_w32_wreadlink(
const WCHAR *, WCHAR *,
size_t);
303extern int rb_w32_usymlink(
const char *src,
const char *link);
305extern int clock_gettime(clockid_t,
struct timespec *);
306extern int clock_getres(clockid_t,
struct timespec *);
307extern rb_pid_t waitpid(rb_pid_t,
int *,
int);
308extern rb_pid_t wait(
int *);
309extern rb_pid_t rb_w32_uspawn(
int,
const char *,
const char*);
310extern rb_pid_t rb_w32_uaspawn(
int,
const char *,
char *
const *);
311extern rb_pid_t rb_w32_uaspawn_flags(
int,
const char *,
char *
const *, DWORD);
312extern int kill(
int,
int);
313extern int fcntl(
int,
int, ...);
314extern int rb_w32_set_nonblock(
int);
315extern rb_pid_t rb_w32_getpid(
void);
316extern rb_pid_t rb_w32_getppid(
void);
317extern int rb_w32_isatty(
int);
318extern int rb_w32_uchdir(
const char *);
319extern int rb_w32_umkdir(
const char *,
int);
320extern int rb_w32_urmdir(
const char *);
321extern int rb_w32_uunlink(
const char *);
322extern int rb_w32_uchmod(
const char *,
int);
323extern int rb_w32_ustati128(
const char *,
struct stati128 *);
324extern int rb_w32_ulstati128(
const char *,
struct stati128 *);
325extern int rb_w32_uaccess(
const char *,
int);
326extern char rb_w32_fd_is_text(
int);
327extern int rb_w32_fstati128(
int,
struct stati128 *);
328extern int rb_w32_dup2(
int,
int);
332#if defined _MSC_VER && _MSC_VER >= 1800 && defined INFINITY
334#pragma warning(disable:4756)
336rb_infinity_float(
void)
342#define INFINITY rb_infinity_float()
345#if !defined __MINGW32__ || defined __NO_ISOCEXT
347#define copysign(a, b) _copysign(a, b)
350scalb(
double a,
long b)
356#if !defined S_IFIFO && defined _S_IFIFO
357#define S_IFIFO _S_IFIFO
360#if !defined S_IRUSR && !defined __MINGW32__
370#if !defined S_IWUSR && !defined __MINGW32__
380#if !defined S_IXUSR && !defined __MINGW32__
390#define S_IFLNK 0xa000
398extern int rb_w32_ftruncate(
int fd, off_t length);
399extern int rb_w32_truncate(
const char *path, off_t length);
400extern int rb_w32_utruncate(
const char *path, off_t length);
403#define HAVE_FTRUNCATE 1
404#if defined HAVE_FTRUNCATE64
405#define ftruncate ftruncate64
407#define ftruncate rb_w32_ftruncate
411#define HAVE_TRUNCATE 1
412#define truncate rb_w32_utruncate
414#if defined(_MSC_VER) && _MSC_VER >= 1400 && _MSC_VER < 1800
415#define strtoll _strtoi64
416#define strtoull _strtoui64
422extern int ioctl (
int,
int, ...);
423extern rb_uid_t getuid (
void);
424extern rb_uid_t geteuid (
void);
425extern rb_gid_t getgid (
void);
426extern rb_gid_t getegid (
void);
427extern int setuid (rb_uid_t);
428extern int setgid (rb_gid_t);
430extern char *rb_w32_strerror(
int);
433#define strerror(e) rb_w32_strerror(e)
459# define EWOULDBLOCK WSAEWOULDBLOCK
462# define EINPROGRESS WSAEINPROGRESS
465# define EALREADY WSAEALREADY
468# define ENOTSOCK WSAENOTSOCK
471# define EDESTADDRREQ WSAEDESTADDRREQ
474# define EMSGSIZE WSAEMSGSIZE
477# define EPROTOTYPE WSAEPROTOTYPE
480# define ENOPROTOOPT WSAENOPROTOOPT
482#ifndef EPROTONOSUPPORT
483# define EPROTONOSUPPORT WSAEPROTONOSUPPORT
485#ifndef ESOCKTNOSUPPORT
486# define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
489# define EOPNOTSUPP WSAEOPNOTSUPP
492# define EPFNOSUPPORT WSAEPFNOSUPPORT
495# define EAFNOSUPPORT WSAEAFNOSUPPORT
498# define EADDRINUSE WSAEADDRINUSE
501# define EADDRNOTAVAIL WSAEADDRNOTAVAIL
504# define ENETDOWN WSAENETDOWN
507# define ENETUNREACH WSAENETUNREACH
510# define ENETRESET WSAENETRESET
513# define ECONNABORTED WSAECONNABORTED
516# define ECONNRESET WSAECONNRESET
519# define ENOBUFS WSAENOBUFS
522# define EISCONN WSAEISCONN
525# define ENOTCONN WSAENOTCONN
528# define ESHUTDOWN WSAESHUTDOWN
531# define ETOOMANYREFS WSAETOOMANYREFS
534# define ETIMEDOUT WSAETIMEDOUT
537# define ECONNREFUSED WSAECONNREFUSED
540# define ELOOP WSAELOOP
544# define EHOSTDOWN WSAEHOSTDOWN
547# define EHOSTUNREACH WSAEHOSTUNREACH
551# define EPROCLIM WSAEPROCLIM
554# define EUSERS WSAEUSERS
557# define EDQUOT WSAEDQUOT
560# define ESTALE WSAESTALE
563# define EREMOTE WSAEREMOTE
573#define F_DUPFD_CLOEXEC 67
578#define FD_SET(fd, set) do {\
580 SOCKET s = _get_osfhandle(fd);\
582 for (i = 0; i < (set)->fd_count; i++) {\
583 if ((set)->fd_array[i] == s) {\
587 if (i == (set)->fd_count) {\
588 if ((set)->fd_count < FD_SETSIZE) {\
589 (set)->fd_array[i] = s;\
596#define FD_CLR(f, s) rb_w32_fdclr(f, s)
599#define FD_ISSET(f, s) rb_w32_fdisset(f, s)
603#define inet_ntop(f,a,n,l) rb_w32_inet_ntop(f,a,n,l)
606#define inet_pton(f,s,d) rb_w32_inet_pton(f,s,d)
609#define accept(s, a, l) rb_w32_accept(s, a, l)
612#define bind(s, a, l) rb_w32_bind(s, a, l)
615#define connect(s, a, l) rb_w32_connect(s, a, l)
618#define select(n, r, w, e, t) rb_w32_select(n, r, w, e, t)
621#define getpeername(s, a, l) rb_w32_getpeername(s, a, l)
624#define getsockname(s, a, l) rb_w32_getsockname(s, a, l)
627#define getsockopt(s, v, n, o, l) rb_w32_getsockopt(s, v, n, o, l)
630#define ioctlsocket(s, c, a) rb_w32_ioctlsocket(s, c, a)
633#define listen(s, b) rb_w32_listen(s, b)
636#define recv(s, b, l, f) rb_w32_recv(s, b, l, f)
639#define recvfrom(s, b, l, f, fr, frl) rb_w32_recvfrom(s, b, l, f, fr, frl)
642#define send(s, b, l, f) rb_w32_send(s, b, l, f)
645#define sendto(s, b, l, f, t, tl) rb_w32_sendto(s, b, l, f, t, tl)
648#define setsockopt(s, v, n, o, l) rb_w32_setsockopt(s, v, n, o, l)
651#define shutdown(s, h) rb_w32_shutdown(s, h)
654#define socket(s, t, p) rb_w32_socket(s, t, p)
657#define gethostbyaddr(a, l, t) rb_w32_gethostbyaddr(a, l, t)
660#define gethostbyname(n) rb_w32_gethostbyname(n)
663#define gethostname(n, l) rb_w32_gethostname(n, l)
666#define getprotobyname(n) rb_w32_getprotobyname(n)
668#undef getprotobynumber
669#define getprotobynumber(n) rb_w32_getprotobynumber(n)
672#define getservbyname(n, p) rb_w32_getservbyname(n, p)
675#define getservbyport(p, pr) rb_w32_getservbyport(p, pr)
678#define get_osfhandle(h) rb_w32_get_osfhandle(h)
681#define getcwd(b, s) rb_w32_ugetcwd(b, s)
684#define getenv(n) rb_w32_ugetenv(n)
687#define rename(o, n) rb_w32_urename(o, n)
690#define times(t) rb_w32_times(t)
693#define dup2(o, n) rb_w32_dup2(o, n)
703int rb_w32_times(
struct tms *);
705struct tm *gmtime_r(
const time_t *,
struct tm *);
706struct tm *localtime_r(
const time_t *,
struct tm *);
709int rb_w32_sleep(
unsigned long msec);
710int rb_w32_uopen(
const char *,
int, ...);
711int rb_w32_wopen(
const WCHAR *,
int, ...);
712int rb_w32_close(
int);
713int rb_w32_fclose(
FILE*);
714int rb_w32_pipe(
int[2]);
715ssize_t rb_w32_read(
int,
void *,
size_t);
716ssize_t rb_w32_write(
int,
const void *,
size_t);
717off_t rb_w32_lseek(
int, off_t,
int);
718int rb_w32_uutime(
const char *,
const struct utimbuf *);
719int rb_w32_uutimes(
const char *,
const struct timeval *);
720int rb_w32_uutimensat(
int ,
const char *,
const struct timespec *,
int );
721long rb_w32_write_console(uintptr_t,
int);
722int WINAPI rb_w32_Sleep(
unsigned long msec);
723int rb_w32_wait_events_blocking(HANDLE *events,
int num, DWORD timeout);
724int rb_w32_time_subtract(
struct timeval *rest,
const struct timeval *wait);
725int rb_w32_wrap_io_handle(HANDLE,
int);
726int rb_w32_unwrap_io_handle(
int);
727WCHAR *rb_w32_mbstr_to_wstr(UINT,
const char *,
int,
long *);
728char *rb_w32_wstr_to_mbstr(UINT,
const WCHAR *,
int,
long *);
730DEPRECATED_BY(rb_w32_ugetcwd,
char *rb_w32_getcwd(
char *,
int));
731DEPRECATED_BY(rb_w32_ugetenv,
char *rb_w32_getenv(
const char *));
732DEPRECATED_BY(rb_w32_urename,
int rb_w32_rename(
const char *,
const char *));
733DEPRECATED_BY(rb_w32_uopen,
int rb_w32_open(
const char *,
int, ...));
734DEPRECATED_BY(rb_w32_uchown,
int chown(
const char *,
int,
int));
735DEPRECATED_BY(rb_w32_ulink,
int link(
const char *,
const char *));
736DEPRECATED_BY(rb_w32_ureadlink, ssize_t readlink(
const char *,
char *,
size_t));
737DEPRECATED_BY(rb_w32_usymlink,
int symlink(
const char *src,
const char *link));
738DEPRECATED_BY(rb_w32_umkdir,
int rb_w32_mkdir(
const char *,
int));
739DEPRECATED_BY(rb_w32_urmdir,
int rb_w32_rmdir(
const char *));
740DEPRECATED_BY(rb_w32_uunlink,
int rb_w32_unlink(
const char *));
741DEPRECATED_BY(rb_w32_uutime,
int rb_w32_utime(
const char *,
const struct utimbuf *));
742DEPRECATED_BY(rb_w32_uutimes,
int rb_w32_utimes(
const char *,
const struct timeval *));
743DEPRECATED_BY(rb_w32_uutimensat,
int rb_w32_utimensat(
int,
const char *,
const struct timespec *,
int));
744DEPRECATED_BY(rb_w32_ustati128,
int rb_w32_stati128(
const char *,
struct stati128 *));
745DEPRECATED_BY(rb_w32_ulstati128,
int rb_w32_lstati128(
const char *,
struct stati128 *));
746DEPRECATED_BY(rb_w32_uaccess,
int rb_w32_access(
const char *,
int));
747DEPRECATED_BY(rb_w32_uspawn, rb_pid_t rb_w32_spawn(
int,
const char *,
const char*));
748DEPRECATED_BY(rb_w32_uaspawn, rb_pid_t rb_w32_aspawn(
int,
const char *,
char *
const *));
749DEPRECATED_BY(rb_w32_uaspawn_flags, rb_pid_t rb_w32_aspawn_flags(
int,
const char *,
char *
const *, DWORD));
758typedef uintptr_t (*asynchronous_func_t)(uintptr_t
self,
int argc, uintptr_t* argv);
759uintptr_t rb_w32_asynchronize(asynchronous_func_t func, uintptr_t
self,
int argc, uintptr_t* argv, uintptr_t intrval);
761RUBY_SYMBOL_EXPORT_END
763#if (defined(__MINGW64_VERSION_MAJOR) || defined(__MINGW64__)) && !defined(__cplusplus)
764#ifdef RUBY_MINGW64_BROKEN_FREXP_MODF
767#define frexp(_X, _Y) __extension__ ({\
768 int intpart_frexp_bug = intpart_frexp_bug;\
769 double result_frexp_bug = frexp((_X), &intpart_frexp_bug);\
770 *(_Y) = intpart_frexp_bug;\
774#define modf(_X, _Y) __extension__ ({\
775 double intpart_modf_bug = intpart_modf_bug;\
776 double result_modf_bug = modf((_X), &intpart_modf_bug);\
777 *(_Y) = intpart_modf_bug;\
782#if defined(__MINGW64__)
789rb_w32_pow(
double x,
double y)
791 return (
double)powl(x, y);
793#elif defined(__MINGW64_VERSION_MAJOR)
794double rb_w32_pow(
double x,
double y);
796#define pow rb_w32_pow
799#if defined(__cplusplus)