summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--ext/socket/rubysocket.h2
-rw-r--r--ext/socket/socket.c15
3 files changed, 18 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 08bc455c7e..8dad46b4a1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Sat Apr 6 19:24:59 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (rsock_sys_fail_sockaddr): Takes struct sockaddr
+ and socklen_t instead of String object.
+ (rsock_sys_fail_addrinfo_or_sockaddr): Follow the above change.
+
+ * ext/socket/rubysocket.h (rsock_sys_fail_sockaddr): Follow the above
+ change.
+
Sat Apr 6 14:28:23 2013 Tanaka Akira <akr@fsij.org>
* ext/socket/rubysocket.h (SockAddrStringValueWithAddrinfo): New macro.
diff --git a/ext/socket/rubysocket.h b/ext/socket/rubysocket.h
index c68cff1d41..75d735e1bf 100644
--- a/ext/socket/rubysocket.h
+++ b/ext/socket/rubysocket.h
@@ -342,7 +342,7 @@ void rsock_init_socket_init(void);
NORETURN(void rsock_sys_fail_host_port(const char *, VALUE, VALUE));
NORETURN(void rsock_sys_fail_path(const char *, VALUE));
-NORETURN(void rsock_sys_fail_sockaddr(const char *, VALUE addr));
+NORETURN(void rsock_sys_fail_sockaddr(const char *, struct sockaddr *addr, socklen_t len));
NORETURN(void rsock_sys_fail_addrinfo(const char *, VALUE rai));
NORETURN(void rsock_sys_fail_sockaddr_or_addrinfo(const char *, VALUE addr, VALUE rai));
diff --git a/ext/socket/socket.c b/ext/socket/socket.c
index 9783313ede..bb8bdac47c 100644
--- a/ext/socket/socket.c
+++ b/ext/socket/socket.c
@@ -47,14 +47,11 @@ rsock_sys_fail_path(const char *mesg, VALUE path)
}
void
-rsock_sys_fail_sockaddr(const char *mesg, VALUE addr)
+rsock_sys_fail_sockaddr(const char *mesg, struct sockaddr *addr, socklen_t len)
{
VALUE rai;
- rai = rsock_addrinfo_new(
- (struct sockaddr *)RSTRING_PTR(addr),
- (socklen_t)RSTRING_LEN(addr), /* overflow should be checked already */
- PF_UNSPEC, 0, 0, Qnil, Qnil);
+ rai = rsock_addrinfo_new(addr, len, PF_UNSPEC, 0, 0, Qnil, Qnil);
rsock_sys_fail_addrinfo(mesg, rai);
}
@@ -73,8 +70,12 @@ rsock_sys_fail_addrinfo(const char *mesg, VALUE rai)
void
rsock_sys_fail_addrinfo_or_sockaddr(const char *mesg, VALUE addr, VALUE rai)
{
- if (NIL_P(rai))
- rsock_sys_fail_sockaddr(mesg, addr);
+ if (NIL_P(rai)) {
+ StringValue(addr);
+ rsock_sys_fail_sockaddr(mesg,
+ (struct sockaddr *)RSTRING_PTR(addr),
+ (socklen_t)RSTRING_LEN(addr)); /* overflow should be checked already */
+ }
else
rsock_sys_fail_addrinfo(mesg, rai);
}