summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-02-26 12:06:17 +0000
committermame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-02-26 12:06:17 +0000
commit785f417270a7cb8f815514e63a7f4d4e8d1d377c (patch)
treeb30c312f5c3008b4d7735689725df7b0a1f51ae4
parent07298aba22284e3eadc7d250205f365e3ff20d37 (diff)
* ext/socket/raddrinfo.c, ext/socket/udpsocket.c: avoid illegal cast
from void-returning function to VALUE-returning one. It causes SEGV on RubySpec with mingw32. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26768 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog6
-rw-r--r--ext/socket/raddrinfo.c9
-rw-r--r--ext/socket/udpsocket.c4
3 files changed, 17 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index a37d3f92e0..f7e7552923 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Fri Feb 26 20:51:47 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/socket/raddrinfo.c, ext/socket/udpsocket.c: avoid illegal cast
+ from void-returning function to VALUE-returning one. It causes SEGV
+ on RubySpec with mingw32.
+
Fri Feb 26 20:07:48 2010 Tanaka Akira <akr@fsij.org>
* pack.c (QUAD_SIZE): it should be always 8.
diff --git a/ext/socket/raddrinfo.c b/ext/socket/raddrinfo.c
index de8c7dc768..822ab1718a 100644
--- a/ext/socket/raddrinfo.c
+++ b/ext/socket/raddrinfo.c
@@ -457,6 +457,13 @@ make_hostent_internal(struct hostent_arg *arg)
}
VALUE
+rsock_freeaddrinfo(struct addrinfo *addr)
+{
+ freeaddrinfo(addr);
+ return Qnil;
+}
+
+VALUE
rsock_make_hostent(VALUE host, struct addrinfo *addr, VALUE (*ipaddr)(struct sockaddr *, size_t))
{
struct hostent_arg arg;
@@ -465,7 +472,7 @@ rsock_make_hostent(VALUE host, struct addrinfo *addr, VALUE (*ipaddr)(struct soc
arg.addr = addr;
arg.ipaddr = ipaddr;
return rb_ensure(make_hostent_internal, (VALUE)&arg,
- RUBY_METHOD_FUNC(freeaddrinfo), (VALUE)addr);
+ rsock_freeaddrinfo, (VALUE)addr);
}
typedef struct {
diff --git a/ext/socket/udpsocket.c b/ext/socket/udpsocket.c
index 8abed48376..8638d81a80 100644
--- a/ext/socket/udpsocket.c
+++ b/ext/socket/udpsocket.c
@@ -62,6 +62,8 @@ udp_connect_internal(struct udp_arg *arg)
return Qfalse;
}
+VALUE rsock_freeaddrinfo(struct addrinfo *addr);
+
/*
* call-seq:
* udpsocket.connect(host, port) => 0
@@ -90,7 +92,7 @@ udp_connect(VALUE sock, VALUE host, VALUE port)
GetOpenFile(sock, fptr);
arg.fd = fptr->fd;
ret = rb_ensure(udp_connect_internal, (VALUE)&arg,
- RUBY_METHOD_FUNC(freeaddrinfo), (VALUE)arg.res);
+ rsock_freeaddrinfo, (VALUE)arg.res);
if (!ret) rb_sys_fail("connect(2)");
return INT2FIX(0);
}