[ruby-dev:27532] [win32] replaced symbols
From:
nobuyoshi nakada <nobuyoshi.nakada@...>
Date:
2005-10-26 08:33:44 UTC
List:
ruby-dev #27532
なかだです。
以前からwin32/win32.hでの関数の置き換えが問題になることがありま
したが、外部に対してはDLL内のaliasで置き換えるようにしてみまし
た。
また、Daniel Bergerが[ruby-talk:162672]でいっているように、最新
のMicrosoftのfree compilerにはdumpbinが入っていないとすると、
[ruby-talk:162690]のような修正が必要になります。
Index: bcc32/Makefile.sub
===================================================================
RCS file: /cvs/ruby/src/ruby/bcc32/Makefile.sub,v
retrieving revision 1.84
diff -U2 -p -r1.84 Makefile.sub
--- bcc32/Makefile.sub 25 Oct 2005 16:59:17 -0000 1.84
+++ bcc32/Makefile.sub 26 Oct 2005 00:40:38 -0000
@@ -432,5 +432,5 @@ $(LIBRUBY): $(LIBRUBY_SO)
$(RUBYDEF): $(LIBRUBY_A) $(PREP)
- $(MINIRUBY) $(srcdir)bcc32/mkexports.rb -output=$@ -base=$(RUBY_SO_NAME) $(LIBRUBY_A)
+ $(MINIRUBY) $(srcdir)win32/mkexports.rb -output=$@ -base=$(RUBY_SO_NAME) $(LIBRUBY_A)
$(RUBY_INSTALL_NAME).rc $(RUBYW_INSTALL_NAME).rc $(RUBY_SO_NAME).rc: rbconfig.rb
Index: win32/mkexports.rb
===================================================================
RCS file: /cvs/ruby/src/ruby/win32/mkexports.rb,v
retrieving revision 1.4
diff -U2 -p -r1.4 mkexports.rb
--- win32/mkexports.rb 18 Jun 2002 10:23:31 -0000 1.4
+++ win32/mkexports.rb 26 Oct 2005 08:31:04 -0000
@@ -3,14 +3,77 @@
SYM = {}
-objs = ARGV.collect {|s| s.tr('/', '\\')}
-IO.foreach("|dumpbin -symbols " + objs.join(' ')) do |l|
- next if /^[0-9A-F]+ 0+ UNDEF / =~ l
- next unless l.sub!(/.*\sExternal\s+\|\s+/, '')
- if l.sub!(/^_/, '')
- next if /@.*@/ =~ l || /@[0-9a-f]{16}$/ =~ l
- elsif !l.sub!(/^(\S+) \([^@?\`\']*\)$/, '\1')
- next
+case RUBY_PLATFORM
+when /mswin|mingw/
+ if path = ENV["PATH"]
+ path = path.split(File::PATH_SEPARATOR)
+ else
+ path = %w[.]
+ end
+ dumpbin = "dumpbin.exe"
+ unless path.find {|dir| File.join(dir, dumpbin)}
+ dumpbin = "link.exe -dump"
+ end
+
+ objs = ARGV.collect {|s| s.tr('/', '\\')}
+ filetype = nil
+ IO.foreach("|#{dumpbin} -symbols -exports " + objs.join(' ')) do |l|
+ if (filetype = l[/^File Type: (.+)/, 1])..(/^\f/ =~ l)
+ case filetype
+ when /OBJECT/, /LIBRARY/
+ next if /^[0-9A-F]+ 0+ UNDEF / =~ l
+ next unless l.sub!(/.*\sExternal\s+\|\s+/, '')
+ if l.sub!(/^_/, '')
+ next if /@.*@/ =~ l || /@[0-9a-f]{16}$/ =~ l
+ l.sub!(/^/, '_') if /@\d+$/ =~ l
+ elsif !l.sub!(/^(\S+) \([^@?\`\']*\)$/, '\1')
+ next
+ end
+ when /DLL/
+ next unless l.sub!(/^\s*\d+\s+[[:xdigit:]]+\s+[[:xdigit:]]+\s+/, '')
+ else
+ next
+ end
+ SYM[l.strip] = true
+ end
+ end
+ SYM["strcasecmp"] = "msvcrt.stricmp"
+ SYM["strncasecmp"] = "msvcrt.strnicmp"
+ prefix = nil
+when /bccwin/
+ STDIN.reopen(open("nul"))
+ ARGV.each do |obj|
+ opt = /\.(?:so|dll)\z/i =~ obj ? "-ee" : "-oiPUBDEF -oiPUBD32"
+ IO.foreach("|tdump -q #{opt} #{obj.tr('/', '\\')}") do |l|
+ next unless /(?:PUBDEF|PUBD32|EXPORT)/ =~ l
+ SYM[$1] = true if /'(.*?)'/ =~ l
+ end
+ end
+ SYM["_strcasecmp"] = "_stricmp"
+ SYM["_strncasecmp"] = "_strnicmp"
+ prefix = '_'
+end
+
+WINAPIS = {}
+SYM.each do |name, val|
+ if /^_?(rb_w32_\w+)@\d+$/ =~ name
+ WINAPIS[$1] = name
+ end
+end
+
+$srcdir = File.dirname(File.dirname(__FILE__)) unless String === $srcdir
+if File.exist?(win32_h = $srcdir+"/win32/win32.h")
+ IO.foreach(win32_h) do |line|
+ if /^#define (\w+)(.*?)\s+(?:\(void\))?(rb_w32_\w+)(.*?)\s*$/ =~ line and
+ $2.delete(" ") == $4.delete(" ")
+ export, internal = $1, $3
+ if prefix
+ export = prefix + export
+ internal = prefix + internal
+ end
+ if SYM[internal] or internal = WINAPIS[internal]
+ SYM[export] = internal
+ end
+ end
end
- SYM[l.strip] = true
end
@@ -22,9 +85,9 @@ elsif $library
end
exports << "Description " + $description.dump if $description
-exports << "EXPORTS" << SYM.keys.sort
+exports << "EXPORTS" << SYM.sort.collect {|k, v| v == true ? k : "#{k}=#{v}"}
if $output
- open($output, 'w') {|f| f.puts exports.join("\n")}
+ open($output, 'w') {|f| f.puts exports}
else
- puts exports.join("\n")
+ puts exports
end
Index: win32/win32.c
===================================================================
RCS file: /cvs/ruby/src/ruby/win32/win32.c,v
retrieving revision 1.177
diff -U2 -p -r1.177 win32.c
--- win32/win32.c 14 Oct 2005 13:06:44 -0000 1.177
+++ win32/win32.c 26 Oct 2005 06:23:26 -0000
@@ -1676,4 +1676,5 @@ init_stdhandle(void)
stderr->_file = 2;
}
+ setvbuf(stderr, NULL, _IONBF, 0);
}
#else
@@ -2010,9 +2011,9 @@ is_readable_console(SOCKET sock) /* call
static void catch_interrupt(void);
-static long
+static int
do_select(int nfds, fd_set *rd, fd_set *wr, fd_set *ex,
struct timeval *timeout)
{
- long r = 0;
+ int r = 0;
if (nfds == 0) {
@@ -2057,9 +2058,16 @@ subst(struct timeval *rest, const struct
}
-long
+int
rb_w32_select(int nfds, fd_set *rd, fd_set *wr, fd_set *ex,
struct timeval *timeout)
{
- long r;
+ return rb_w32__select(nfds, rd, wr, ex, timeout);
+}
+
+int WSAAPI
+rb_w32__select(int nfds, fd_set *rd, fd_set *wr, fd_set *ex,
+ struct timeval *timeout)
+{
+ int r;
fd_set pipe_rd;
fd_set cons_rd;
@@ -2198,4 +2206,10 @@ int
rb_w32_accept(int s, struct sockaddr *addr, int *addrlen)
{
+ return rb_w32__accept(s, addr, addrlen);
+}
+
+int WSAAPI
+rb_w32__accept(int s, struct sockaddr *addr, int *addrlen)
+{
SOCKET r;
@@ -2216,9 +2230,15 @@ rb_w32_accept(int s, struct sockaddr *ad
}
#undef bind
-int
+int
rb_w32_bind(int s, const struct sockaddr *addr, int addrlen)
{
+ return rb_w32__bind(s, addr, addrlen);
+}
+
+int WSAAPI
+rb_w32__bind(int s, const struct sockaddr *addr, int addrlen)
+{
int r;
@@ -2236,7 +2257,13 @@ rb_w32_bind(int s, const struct sockaddr
#undef connect
-int
+int
rb_w32_connect(int s, const struct sockaddr *addr, int addrlen)
{
+ return rb_w32__connect(s, addr, addrlen);
+}
+
+int WSAAPI
+rb_w32__connect(int s, const struct sockaddr *addr, int addrlen)
+{
int r;
if (!NtSocketsInitialized) {
@@ -2262,7 +2289,13 @@ rb_w32_connect(int s, const struct socka
#undef getpeername
-int
+int
rb_w32_getpeername(int s, struct sockaddr *addr, int *addrlen)
{
+ return rb_w32__getpeername(s, addr, addrlen);
+}
+
+int WSAAPI
+rb_w32__getpeername(int s, struct sockaddr *addr, int *addrlen)
+{
int r;
if (!NtSocketsInitialized) {
@@ -2279,7 +2312,13 @@ rb_w32_getpeername(int s, struct sockadd
#undef getsockname
-int
+int
rb_w32_getsockname(int s, struct sockaddr *addr, int *addrlen)
{
+ return rb_w32__getsockname(s, addr, addrlen);
+}
+
+int WSAAPI
+rb_w32__getsockname(int s, struct sockaddr *addr, int *addrlen)
+{
int r;
if (!NtSocketsInitialized) {
@@ -2294,7 +2333,13 @@ rb_w32_getsockname(int s, struct sockadd
}
-int
+int
rb_w32_getsockopt(int s, int level, int optname, char *optval, int *optlen)
{
+ return rb_w32__getsockopt(s, level, optname, optval, optlen);
+}
+
+int WSAAPI
+rb_w32__getsockopt(int s, int level, int optname, char *optval, int *optlen)
+{
int r;
if (!NtSocketsInitialized) {
@@ -2311,7 +2356,13 @@ rb_w32_getsockopt(int s, int level, int
#undef ioctlsocket
-int
+int
rb_w32_ioctlsocket(int s, long cmd, u_long *argp)
{
+ return rb_w32__ioctlsocket(s, cmd, argp);
+}
+
+int WSAAPI
+rb_w32__ioctlsocket(int s, long cmd, u_long *argp)
+{
int r;
if (!NtSocketsInitialized) {
@@ -2328,7 +2379,13 @@ rb_w32_ioctlsocket(int s, long cmd, u_lo
#undef listen
-int
+int
rb_w32_listen(int s, int backlog)
{
+ return rb_w32__listen(s, backlog);
+}
+
+int WSAAPI
+rb_w32__listen(int s, int backlog)
+{
int r;
if (!NtSocketsInitialized) {
@@ -2345,7 +2402,13 @@ rb_w32_listen(int s, int backlog)
#undef recv
-int
+int
rb_w32_recv(int s, char *buf, int len, int flags)
{
+ return rb_w32__recv(s, buf, len, flags);
+}
+
+int WSAAPI
+rb_w32__recv(int s, char *buf, int len, int flags)
+{
int r;
if (!NtSocketsInitialized) {
@@ -2362,8 +2425,15 @@ rb_w32_recv(int s, char *buf, int len, i
#undef recvfrom
-int
-rb_w32_recvfrom(int s, char *buf, int len, int flags,
+int
+rb_w32_recvfrom(int s, char *buf, int len, int flags,
struct sockaddr *from, int *fromlen)
{
+ return rb_w32__recvfrom(s, buf, len, flags, from, fromlen);
+}
+
+int WSAAPI
+rb_w32__recvfrom(int s, char *buf, int len, int flags,
+ struct sockaddr *from, int *fromlen)
+{
int r;
if (!NtSocketsInitialized) {
@@ -2380,7 +2450,13 @@ rb_w32_recvfrom(int s, char *buf, int le
#undef send
-int
+int
rb_w32_send(int s, const char *buf, int len, int flags)
{
+ return rb_w32__send(s, buf, len, flags);
+}
+
+int WSAAPI
+rb_w32__send(int s, const char *buf, int len, int flags)
+{
int r;
if (!NtSocketsInitialized) {
@@ -2397,8 +2473,15 @@ rb_w32_send(int s, const char *buf, int
#undef sendto
-int
+int
rb_w32_sendto(int s, const char *buf, int len, int flags,
const struct sockaddr *to, int tolen)
{
+ return rb_w32__sendto(s, buf, len, flags, to, tolen);
+}
+
+int WSAAPI
+rb_w32__sendto(int s, const char *buf, int len, int flags,
+ const struct sockaddr *to, int tolen)
+{
int r;
if (!NtSocketsInitialized) {
@@ -2415,7 +2498,13 @@ rb_w32_sendto(int s, const char *buf, in
#undef setsockopt
-int
+int
rb_w32_setsockopt(int s, int level, int optname, const char *optval, int optlen)
{
+ return rb_w32__setsockopt(s, level, optname, optval, optlen);
+}
+
+int WSAAPI
+rb_w32__setsockopt(int s, int level, int optname, const char *optval, int optlen)
+{
int r;
if (!NtSocketsInitialized) {
@@ -2432,7 +2521,13 @@ rb_w32_setsockopt(int s, int level, int
#undef shutdown
-int
+int
rb_w32_shutdown(int s, int how)
{
+ return rb_w32__shutdown(s, how);
+}
+
+int WSAAPI
+rb_w32__shutdown(int s, int how)
+{
int r;
if (!NtSocketsInitialized) {
@@ -2489,7 +2584,13 @@ open_ifs_socket(int af, int type, int pr
#undef socket
-int
+int
rb_w32_socket(int af, int type, int protocol)
{
+ return rb_w32__socket(af, type, protocol);
+}
+
+int WSAAPI
+rb_w32__socket(int af, int type, int protocol)
+{
SOCKET s;
int fd;
@@ -2514,5 +2615,11 @@ rb_w32_socket(int af, int type, int prot
struct hostent *
-rb_w32_gethostbyaddr (const char *addr, int len, int type)
+rb_w32_gethostbyaddr(const char *addr, int len, int type)
+{
+ return rb_w32__gethostbyaddr(addr, len, type);
+}
+
+struct hostent * WSAAPI
+rb_w32__gethostbyaddr(const char *addr, int len, int type)
{
struct hostent *r;
@@ -2531,5 +2638,11 @@ rb_w32_gethostbyaddr (const char *addr,
struct hostent *
-rb_w32_gethostbyname (const char *name)
+rb_w32_gethostbyname(const char *name)
+{
+ return rb_w32__gethostbyname(name);
+}
+
+struct hostent * WSAAPI
+rb_w32__gethostbyname(const char *name)
{
struct hostent *r;
@@ -2548,5 +2661,11 @@ rb_w32_gethostbyname (const char *name)
int
-rb_w32_gethostname (char *name, int len)
+rb_w32_gethostname(char *name, int len)
+{
+ return rb_w32__gethostname(name, len);
+}
+
+int WSAAPI
+rb_w32__gethostname(char *name, int len)
{
int r;
@@ -2565,5 +2684,11 @@ rb_w32_gethostname (char *name, int len)
struct protoent *
-rb_w32_getprotobyname (const char *name)
+rb_w32_getprotobyname(const char *name)
+{
+ return rb_w32__getprotobyname(name);
+}
+
+struct protoent * WSAAPI
+rb_w32__getprotobyname(const char *name)
{
struct protoent *r;
@@ -2582,5 +2707,11 @@ rb_w32_getprotobyname (const char *name)
struct protoent *
-rb_w32_getprotobynumber (int num)
+rb_w32_getprotobynumber(int num)
+{
+ return rb_w32__getprotobynumber(num);
+}
+
+struct protoent * WSAAPI
+rb_w32__getprotobynumber(int num)
{
struct protoent *r;
@@ -2599,5 +2730,11 @@ rb_w32_getprotobynumber (int num)
struct servent *
-rb_w32_getservbyname (const char *name, const char *proto)
+rb_w32_getservbyname(const char *name, const char *proto)
+{
+ return rb_w32__getservbyname(name, proto);
+}
+
+struct servent * WSAAPI
+rb_w32__getservbyname(const char *name, const char *proto)
{
struct servent *r;
@@ -2616,5 +2753,11 @@ rb_w32_getservbyname (const char *name,
struct servent *
-rb_w32_getservbyport (int port, const char *proto)
+rb_w32_getservbyport(int port, const char *proto)
+{
+ return rb_w32__getservbyport(port, proto);
+}
+
+struct servent * WSAAPI
+rb_w32__getservbyport(int port, const char *proto)
{
struct servent *r;
@@ -3446,4 +3589,10 @@ int
rb_w32_sleep(unsigned long msec)
{
+ return rb_w32_msleep(msec);
+}
+
+int WINAPI
+rb_w32_msleep(unsigned long msec)
+{
DWORD ret;
RUBY_CRITICAL(ret = wait_events(NULL, msec));
@@ -3461,14 +3610,22 @@ catch_interrupt(void)
}
-#if defined __BORLANDC__ || defined _WIN32_WCE
#undef read
int
-read(int fd, void *buf, size_t size)
+rb_w32_read(int fd, void *buf, size_t size)
{
+ int oerr = errno;
int trap_immediate = rb_trap_immediate;
- int ret = _read(fd, buf, size);
- if ((ret < 0) && (errno == EPIPE)) {
- errno = 0;
- ret = 0;
+ int ret;
+
+ again:
+ if ((ret= _read(fd, buf, size)) < 0) {
+ switch (GetLastError()) {
+ case ERROR_NETNAME_DELETED:
+#if defined __BORLANDC__ || defined _WIN32_WCE
+ case ERROR_BROKEN_PIPE:
+#endif
+ errno = oerr;
+ ret = 0;
+ }
}
rb_trap_immediate = trap_immediate;
@@ -3476,5 +3633,4 @@ read(int fd, void *buf, size_t size)
return ret;
}
-#endif
#undef fgetc
Index: win32/win32.h
===================================================================
RCS file: /cvs/ruby/src/ruby/win32/win32.h,v
retrieving revision 1.73
diff -U2 -p -r1.73 win32.h
--- win32/win32.h 14 Sep 2005 14:30:37 -0000 1.73
+++ win32/win32.h 26 Oct 2005 06:40:09 -0000
@@ -82,21 +82,20 @@ extern "C++" {
#undef utime
#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 getchar() rb_w32_getc(stdin)
-#define putchar(_c) rb_w32_putc(_c, stdout)
#define fgetchar() getchar()
#define fputchar(_c) putchar(_c)
#define utime(_p, _t) rb_w32_utime(_p, _t)
-#define strcasecmp(s1, s2) stricmp(s1, s2)
-#define strncasecmp(s1, s2, n) strnicmp(s1, s2, n)
-
#define pipe(p) _pipe(p, 2048L, O_BINARY)
#define close(h) rb_w32_close(h)
#define fclose(f) rb_w32_fclose(f)
#define getpid() rb_w32_getpid()
-#define sleep(x) rb_w32_sleep((x)*1000)
+#define sleep(x) rb_w32_msleep((x)*1000)
+#define Sleep(msec) (void)rb_w32_msleep(msec)
#ifdef __BORLANDC__
#define creat(p, m) _creat(p, m)
@@ -105,5 +104,4 @@ extern "C++" {
#define mktemp(t) _mktemp(t)
#define tell(h) _tell(h)
-#define unlink(p) _unlink(p)
#define write(h, b, l) _write(h, b, l)
#define _open _sopen
@@ -119,5 +117,4 @@ extern "C++" {
#endif
-#define fsync(h) _commit(h)
#undef stat
#define stat(path,st) rb_w32_stat(path,st)
@@ -135,4 +132,11 @@ extern "C++" {
#undef unlink
#define unlink(p) rb_w32_unlink(p)
+#undef read
+#define read(fd, buf, size) rb_w32_read(fd, buf, size)
+#endif
+
+#define strcasecmp(s1, s2) stricmp(s1, s2)
+#define strncasecmp(s1, s2, n) strnicmp(s1, s2, n)
+#define fsync(h) _commit(h)
#ifdef __MINGW32__
@@ -153,5 +157,5 @@ 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 long rb_w32_select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
+extern int rb_w32_select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
extern int rb_w32_getpeername(int, struct sockaddr *, int *);
extern int rb_w32_getsockname(int, struct sockaddr *, int *);
@@ -180,4 +184,30 @@ extern char **rb_w32_get_environ(void);
extern void rb_w32_free_environ(char **);
+#ifdef WSAAPI
+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 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 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 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 *);
+#endif
+
#define vsnprintf(s,n,f,l) rb_w32_vsnprintf(s,n,f,l)
#define snprintf rb_w32_snprintf
@@ -203,4 +233,5 @@ extern int rb_w32_rmdir(const char *);
extern int rb_w32_unlink(const char *);
extern int rb_w32_stat(const char *, struct stat *);
+extern int rb_w32_read(int, void *, size_t);
#ifdef __BORLANDC__
@@ -289,5 +320,7 @@ extern int setgid (rb_gid_t);
extern char *rb_w32_strerror(int);
+#ifdef RUBY_EXPORT
#define strerror(e) rb_w32_strerror(e)
+#endif
#define PIPE_BUF 1024
@@ -352,19 +385,4 @@ extern char *rb_w32_strerror(int);
#define O_NONBLOCK 1
-#ifdef accept
-#undef accept
-#endif
-#define accept(s, a, l) rb_w32_accept(s, a, l)
-
-#ifdef bind
-#undef bind
-#endif
-#define bind(s, a, l) rb_w32_bind(s, a, l)
-
-#ifdef connect
-#undef connect
-#endif
-#define connect(s, a, l) rb_w32_connect(s, a, l)
-
#undef FD_SET
#define FD_SET(f, s) rb_w32_fdset(f, s)
@@ -376,127 +394,93 @@ extern char *rb_w32_strerror(int);
#define FD_ISSET(f, s) rb_w32_fdisset(f, s)
+#ifdef RUBY_EXPORT
+#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)
+#define select(n, r, w, e, t) rb_w32__select(n, r, w, e, t)
-#ifdef getpeername
#undef getpeername
-#endif
-#define getpeername(s, a, l) rb_w32_getpeername(s, a, l)
+#define getpeername(s, a, l) rb_w32__getpeername(s, a, l)
-#ifdef getsockname
#undef getsockname
-#endif
-#define getsockname(s, a, l) rb_w32_getsockname(s, a, l)
+#define getsockname(s, a, l) rb_w32__getsockname(s, a, l)
-#ifdef getsockopt
#undef getsockopt
-#endif
-#define getsockopt(s, v, n, o, l) rb_w32_getsockopt(s, v, n, o, l)
+#define getsockopt(s, v, n, o, l) rb_w32__getsockopt(s, v, n, o, l)
-#ifdef ioctlsocket
#undef ioctlsocket
-#endif
-#define ioctlsocket(s, c, a) rb_w32_ioctlsocket(s, c, a)
+#define ioctlsocket(s, c, a) rb_w32__ioctlsocket(s, c, a)
-#ifdef listen
#undef listen
-#endif
-#define listen(s, b) rb_w32_listen(s, b)
+#define listen(s, b) rb_w32__listen(s, b)
-#ifdef recv
#undef recv
-#endif
-#define recv(s, b, l, f) rb_w32_recv(s, b, l, f)
+#define recv(s, b, l, f) rb_w32__recv(s, b, l, f)
-#ifdef recvfrom
#undef recvfrom
-#endif
-#define recvfrom(s, b, l, f, fr, frl) rb_w32_recvfrom(s, b, l, f, fr, frl)
+#define recvfrom(s, b, l, f, fr, frl) rb_w32__recvfrom(s, b, l, f, fr, frl)
-#ifdef send
#undef send
-#endif
-#define send(s, b, l, f) rb_w32_send(s, b, l, f)
+#define send(s, b, l, f) rb_w32__send(s, b, l, f)
-#ifdef sendto
#undef sendto
-#endif
-#define sendto(s, b, l, f, t, tl) rb_w32_sendto(s, b, l, f, t, tl)
+#define sendto(s, b, l, f, t, tl) rb_w32__sendto(s, b, l, f, t, tl)
-#ifdef setsockopt
#undef setsockopt
-#endif
-#define setsockopt(s, v, n, o, l) rb_w32_setsockopt(s, v, n, o, l)
+#define setsockopt(s, v, n, o, l) rb_w32__setsockopt(s, v, n, o, l)
-#ifdef shutdown
#undef shutdown
-#endif
-#define shutdown(s, h) rb_w32_shutdown(s, h)
+#define shutdown(s, h) rb_w32__shutdown(s, h)
-#ifdef socket
#undef socket
-#endif
-#define socket(s, t, p) rb_w32_socket(s, t, p)
+#define socket(s, t, p) rb_w32__socket(s, t, p)
-#ifdef gethostbyaddr
#undef gethostbyaddr
-#endif
-#define gethostbyaddr(a, l, t) rb_w32_gethostbyaddr(a, l, t)
+#define gethostbyaddr(a, l, t) rb_w32__gethostbyaddr(a, l, t)
-#ifdef gethostbyname
#undef gethostbyname
-#endif
-#define gethostbyname(n) rb_w32_gethostbyname(n)
+#define gethostbyname(n) rb_w32__gethostbyname(n)
-#ifdef gethostname
#undef gethostname
-#endif
-#define gethostname(n, l) rb_w32_gethostname(n, l)
+#define gethostname(n, l) rb_w32__gethostname(n, l)
-#ifdef getprotobyname
#undef getprotobyname
-#endif
-#define getprotobyname(n) rb_w32_getprotobyname(n)
+#define getprotobyname(n) rb_w32__getprotobyname(n)
-#ifdef getprotobynumber
#undef getprotobynumber
-#endif
-#define getprotobynumber(n) rb_w32_getprotobynumber(n)
+#define getprotobynumber(n) rb_w32__getprotobynumber(n)
-#ifdef getservbyname
#undef getservbyname
-#endif
-#define getservbyname(n, p) rb_w32_getservbyname(n, p)
+#define getservbyname(n, p) rb_w32__getservbyname(n, p)
-#ifdef getservbyport
#undef getservbyport
-#endif
-#define getservbyport(p, pr) rb_w32_getservbyport(p, pr)
+#define getservbyport(p, pr) rb_w32__getservbyport(p, pr)
-#ifdef socketpair
#undef socketpair
-#endif
#define socketpair(a, t, p, s) rb_w32_socketpair(a, t, p, s)
-#ifdef get_osfhandle
#undef get_osfhandle
-#endif
#define get_osfhandle(h) rb_w32_get_osfhandle(h)
-#ifdef getcwd
#undef getcwd
-#endif
#define getcwd(b, s) rb_w32_getcwd(b, s)
-#ifdef getenv
#undef getenv
-#endif
#define getenv(n) rb_w32_getenv(n)
-#ifdef rename
#undef rename
-#endif
#define rename(o, n) rb_w32_rename(o, n)
+#undef times
+#define times(t) rb_w32_times(t)
+#endif
+
struct tms {
long tms_utime;
@@ -506,8 +490,4 @@ struct tms {
};
-#ifdef times
-#undef times
-#endif
-#define times(t) rb_w32_times(t)
int rb_w32_times(struct tms *);
@@ -523,5 +503,5 @@ int rb_w32_close(int);
int rb_w32_fclose(FILE*);
int rb_w32_utime(const char *, const struct utimbuf *);
-#define Sleep(msec) (void)rb_w32_sleep(msec)
+int WINAPI rb_w32_msleep(unsigned long msec);
/*
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦