# define TO_SOCKET(x) (x)
#endif /* USE_SOCKETS_AS_HANDLES */
-#if defined(USE_ITHREADS)
#define StartSockets() \
STMT_START { \
if (!wsock_started) \
start_sockets(); \
- set_socktype(); \
} STMT_END
-#else
-#define StartSockets() \
- STMT_START { \
- if (!wsock_started) { \
- start_sockets(); \
- set_socktype(); \
- } \
- } STMT_END
-#endif
#define SOCKET_TEST(x, y) \
STMT_START { \
wsock_started = 1;
}
-void
-set_socktype(void)
-{
-}
-
-
#ifndef USE_SOCKETS_AS_HANDLES
#undef fdopen
FILE *
/*
* If we get here, then fd is actually a socket.
*/
- Newz(1310, fp, 1, FILE); /* XXX leak, good thing this code isn't used */
+ Newxz(fp, 1, FILE); /* XXX leak, good thing this code isn't used */
if(fp == NULL) {
errno = ENOMEM;
return NULL;
WSAPROTOCOL_INFOW *proto_buffers;
int protocols_available = 0;
- New(1, proto_buffers, proto_buffers_len / sizeof(WSAPROTOCOL_INFOW),
+ Newx(proto_buffers, proto_buffers_len / sizeof(WSAPROTOCOL_INFOW),
WSAPROTOCOL_INFOW);
if ((protocols_available = WSCEnumProtocols(NULL, proto_buffers,
win32_ioctl(int i, unsigned int u, char *data)
{
dTHX;
- u_long argp = (u_long)data;
+ u_long u_long_arg;
int retval;
-
+
if (!wsock_started) {
Perl_croak_nocontext("ioctl implemented only on sockets");
/* NOTREACHED */
}
- retval = ioctlsocket(TO_SOCKET(i), (long)u, &argp);
+ /* mauke says using memcpy avoids alignment issues */
+ memcpy(&u_long_arg, data, sizeof u_long_arg);
+ retval = ioctlsocket(TO_SOCKET(i), (long)u, &u_long_arg);
+ memcpy(data, &u_long_arg, sizeof u_long_arg);
+
if (retval == SOCKET_ERROR) {
if (WSAGetLastError() == WSAENOTSOCK) {
Perl_croak_nocontext("ioctl implemented only on sockets");