char * addr_str;
char * ip_address;
if (DO_UTF8(ip_address_sv) && !sv_utf8_downgrade(ip_address_sv, 1))
- croak("Wide character in Socket::inet_ntoa");
+ croak("Wide character in %s", "Socket::inet_ntoa");
ip_address = SvPVbyte(ip_address_sv, addrlen);
if (addrlen == sizeof(addr) || addrlen == 4)
addr.s_addr =
((addr.s_addr >> 16) & 0xFF),
((addr.s_addr >> 8) & 0xFF),
( addr.s_addr & 0xFF));
- ST(0) = sv_2mortal(newSVpvn(addr_str, strlen(addr_str)));
+ ST(0) = newSVpvn_flags(addr_str, strlen(addr_str), SVs_TEMP);
Safefree(addr_str);
}
* character, starting with \0 and possibly including \0s,
* therefore the length of the structure must denote the
* end of that character array */
- addr_len = (void *)&sun_ad.sun_path - (void *)&sun_ad + len;
+ addr_len = (char *)&(sun_ad.sun_path) - (char *)&sun_ad + len;
} else {
addr_len = sizeof sun_ad;
}
- ST(0) = sv_2mortal(newSVpvn((char *)&sun_ad, addr_len));
+ ST(0) = newSVpvn_flags((char *)&sun_ad, addr_len, SVs_TEMP);
#else
ST(0) = (SV *) not_here("pack_sockaddr_un");
#endif
if (addr.sun_path[0] == '\0') {
/* Linux-style abstract socket address begins with a nul
* and can contain nuls. */
- addr_len = (void *)&addr - (void *)&addr.sun_path + sockaddrlen;
+ addr_len = (char *)&addr - (char *)&(addr.sun_path) + sockaddrlen;
} else {
for (addr_len = 0; addr.sun_path[addr_len]
&& addr_len < sizeof addr.sun_path; addr_len++);
}
- ST(0) = sv_2mortal(newSVpvn(addr.sun_path, addr_len));
+ ST(0) = newSVpvn_flags(addr.sun_path, addr_len, SVs_TEMP);
#else
ST(0) = (SV *) not_here("unpack_sockaddr_un");
#endif
STRLEN addrlen;
char * ip_address;
if (DO_UTF8(ip_address_sv) && !sv_utf8_downgrade(ip_address_sv, 1))
- croak("Wide character in Socket::pack_sockaddr_in");
+ croak("Wide character in %s", "Socket::pack_sockaddr_in");
ip_address = SvPVbyte(ip_address_sv, addrlen);
if (addrlen == sizeof(addr) || addrlen == 4)
addr.s_addr =
sin.sin_family = AF_INET;
sin.sin_port = htons(port);
sin.sin_addr.s_addr = htonl(addr.s_addr);
- ST(0) = sv_2mortal(newSVpvn((char *)&sin, sizeof sin));
+ ST(0) = newSVpvn_flags((char *)&sin, sizeof (sin), SVs_TEMP);
}
void
EXTEND(SP, 2);
PUSHs(sv_2mortal(newSViv((IV) port)));
- PUSHs(sv_2mortal(newSVpvn((char *)&ip_address, sizeof ip_address)));
+ PUSHs(newSVpvn_flags((char *)&ip_address, sizeof(ip_address), SVs_TEMP));
}
void
} else if(af == AF_INET6) {
struct_size = sizeof(struct in6_addr);
} else {
- croak("Bad address family for Socket::inet_ntop, got %d, should be either AF_INET or AF_INET6",
+ croak("Bad address family for %s, got %d, should be either AF_INET or AF_INET6",
+ "Socket::inet_ntop",
af);
}
Copy( ip_address, &addr, sizeof addr, char );
inet_ntop(af, &addr, str, INET6_ADDRSTRLEN);
- ST(0) = sv_2mortal(newSVpv(str, strlen(str)));
+ ST(0) = newSVpvn_flags(str, strlen(str), SVs_TEMP);
#else
ST(0) = (SV *)not_here("inet_ntop");
#endif
ST(0) = sv_newmortal();
if (ok) {
- sv_setpvn( ST(0), (char *)&ip_address, sizeof ip_address );
+ sv_setpvn( ST(0), (char *)&ip_address,
+ af == AF_INET6 ? sizeof(ip_address) : sizeof(struct in_addr) );
}
#else
ST(0) = (SV *)not_here("inet_pton");