about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2013-11-21 18:57:09 +0000
committerEric Wong <normalperson@yhbt.net>2014-02-04 01:43:02 +0000
commit7a49e4df0a8f23594a83f21f2fd54955dcb6a0fc (patch)
treef618260a5b974770bbadc0c1ad583e0267e380c0
parent809b9716a2593c0bfcaa115e7e560615c6357b55 (diff)
downloadkgio-7a49e4df0a8f23594a83f21f2fd54955dcb6a0fc.tar.gz
This should enforce correctness with our non-use of RSTRING_MODIFIED
in this file, hopefully allowing Rubinius to optimize better.
-rw-r--r--ext/kgio/connect.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/ext/kgio/connect.c b/ext/kgio/connect.c
index ef1a396..2261b10 100644
--- a/ext/kgio/connect.c
+++ b/ext/kgio/connect.c
@@ -1,3 +1,4 @@
+/* We do not modify RSTRING in this file, so RSTRING_MODIFIED is not needed */
 #include "kgio.h"
 #include "my_fileno.h"
 #include "sock_for_fd.h"
@@ -67,7 +68,8 @@ retry:
 }
 
 static VALUE
-my_connect(VALUE klass, int io_wait, int domain, void *addr, socklen_t addrlen)
+my_connect(VALUE klass, int io_wait, int domain,
+        const void *addr, socklen_t addrlen)
 {
         int fd = my_socket(domain);
 
@@ -133,11 +135,11 @@ static VALUE tcp_connect(VALUE klass, VALUE ip, VALUE port, int io_wait)
                           &addr, hints.ai_addrlen);
 }
 
-static struct sockaddr *sockaddr_from(socklen_t *addrlen, VALUE addr)
+static const struct sockaddr *sockaddr_from(socklen_t *addrlen, VALUE addr)
 {
         if (TYPE(addr) == T_STRING) {
                 *addrlen = (socklen_t)RSTRING_LEN(addr);
-                return (struct sockaddr *)(RSTRING_PTR(addr));
+                return (const struct sockaddr *)(RSTRING_PTR(addr));
         }
         rb_raise(rb_eTypeError, "invalid address");
         return NULL;
@@ -149,9 +151,9 @@ static struct sockaddr *sockaddr_from(socklen_t *addrlen, VALUE addr)
 #endif
 struct tfo_args {
         int fd;
-        void *buf;
+        const void *buf;
         size_t buflen;
-        struct sockaddr *addr;
+        const struct sockaddr *addr;
         socklen_t addrlen;
 };
 
@@ -296,9 +298,9 @@ static VALUE stream_connect(VALUE klass, VALUE addr, int io_wait)
 {
         int domain;
         socklen_t addrlen;
-        struct sockaddr *sockaddr = sockaddr_from(&addrlen, addr);
+        const struct sockaddr *sockaddr = sockaddr_from(&addrlen, addr);
 
-        switch (((struct sockaddr_storage *)(sockaddr))->ss_family) {
+        switch (((const struct sockaddr_storage *)(sockaddr))->ss_family) {
         case AF_UNIX: domain = PF_UNIX; break;
         case AF_INET: domain = PF_INET; break;
         case AF_INET6: domain = PF_INET6; break;