Break apart the list of functions defined in universal.c by perl
[p5sagit/p5-mst-13.2.git] / ext / Socket / Socket.xs
index d2c0ae5..076297f 100644 (file)
@@ -182,7 +182,7 @@ my_inet_aton(register const char *cp, struct in_addr *addr)
 
 
 static int
-not_here(char *s)
+not_here(const char *s)
 {
     croak("Socket::%s not implemented on this architecture", s);
     return -1;
@@ -231,12 +231,10 @@ inet_aton(host)
        {
        struct in_addr ip_address;
        struct hostent * phe;
-       int ok =
-               (host != NULL) &&
-               (*host != '\0') &&
-               inet_aton(host, &ip_address);
+       int ok = (*host != '\0') && inet_aton(host, &ip_address);
 
-       if (!ok && (phe = gethostbyname(host))) {
+       if (!ok && (phe = gethostbyname(host)) &&
+                       phe->h_addrtype == AF_INET && phe->h_length == 4) {
                Copy( phe->h_addr, &ip_address, phe->h_length, char );
                ok = 1;
        }
@@ -272,7 +270,7 @@ inet_ntoa(ip_address_sv)
         * in HP-UX + GCC + 64bitint (returns "0.0.0.0"),
         * so let's use this sprintf() workaround everywhere.
         * This is also more threadsafe than using inet_ntoa(). */
-       New(1138, addr_str, 4 * 3 + 3 + 1, char); /* IPv6? */
+       Newx(addr_str, 4 * 3 + 3 + 1, char); /* IPv6? */
        sprintf(addr_str, "%d.%d.%d.%d",
                ((addr.s_addr >> 24) & 0xFF),
                ((addr.s_addr >> 16) & 0xFF),
@@ -376,7 +374,7 @@ unpack_sockaddr_un(sun_sv)
        e = (char*)addr.sun_path;
        /* On Linux, the name of abstract unix domain sockets begins
         * with a '\0', so allow this. */
-       while ((*e || e == addr.sun_path && e[1] && sockaddrlen > 1)
+       while ((*e || (e == addr.sun_path && e[1] && sockaddrlen > 1))
                && e < (char*)addr.sun_path + sizeof addr.sun_path)
            ++e;
        ST(0) = sv_2mortal(newSVpvn(addr.sun_path, e - (char*)addr.sun_path));