diff options
Diffstat (limited to 'ext/socket/raddrinfo.c')
-rw-r--r-- | ext/socket/raddrinfo.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/ext/socket/raddrinfo.c b/ext/socket/raddrinfo.c index eead91170..ff3926405 100644 --- a/ext/socket/raddrinfo.c +++ b/ext/socket/raddrinfo.c @@ -1255,15 +1255,16 @@ addrinfo_mload(VALUE self, VALUE ary) #ifdef HAVE_SYS_UN_H case AF_UNIX: { - struct sockaddr_un *su = (struct sockaddr_un *)&ss; - memset(su, 0, sizeof(*su)); - su->sun_family = AF_UNIX; + struct sockaddr_un sun; + memset(&sun, 0, sizeof(sun)); + sun.sun_family = AF_UNIX; StringValue(v); - if (sizeof(su->sun_path) <= RSTRING_LEN(v)) + if (sizeof(sun.sun_path) <= RSTRING_LEN(v)) rb_raise(rb_eSocket, "too long AF_UNIX path"); - memcpy(su->sun_path, RSTRING_PTR(v), RSTRING_LEN(v)); - len = sizeof(*su); + memcpy(sun.sun_path, RSTRING_PTR(v), RSTRING_LEN(v)); + len = sizeof(sun); + memcpy(&ss, &sun, len); break; } #endif |