ioctl on perlhost platforms take a char*, not void*
authorDaniel Dragan <bulk88@hotmail.com>
Tue, 19 Nov 2013 04:26:05 +0000 (23:26 -0500)
committerTony Cook <tony@develop-help.com>
Wed, 20 Nov 2013 00:21:54 +0000 (11:21 +1100)
As of commit 0cb9638729 IOCtl from perlhost is prototyped to take a char *.
In the later commit 2986a63f7e5 the netware commit is introduced that adds
a void* cast without explination, but today PerlLIOIOCtl is prototyped as
char* in nwperlhost.h (nwperlhost.h didnt exist at 2986a63f7e5 ). In
commit 6e22d04617 Win32 starts to use the void * cast from netware.

Using a void * cast breaks a VC 2003 C++ mode build of IO.xs because of
different types. Switch to a char * cast that matches the vtable prototype.

dist/IO/IO.xs

index efb0ed6..360b067 100644 (file)
@@ -540,7 +540,7 @@ sockatmark (sock)
        int flag = 0;
 #   ifdef SIOCATMARK
 #     if defined(NETWARE) || defined(WIN32)
-       if (ioctl(fd, SIOCATMARK, (void*)&flag) != 0)
+       if (ioctl(fd, SIOCATMARK, (char*)&flag) != 0)
 #     else
        if (ioctl(fd, SIOCATMARK, &flag) != 0)
 #     endif