# New Ticket Created by Ronald Blaschke
# Please include the string: [perl #52096]
# in the subject line of all future correspondence about this issue.
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=52096 >
I just noticed this warning on Windows.
src\io\io.c
src\io\io.c(180) : warning C4047: 'function' : 'int' differs in levels
of indirection from 'PIOHANDLE'
src\io\io.c(180) : warning C4024: 'dup' : different types for formal and
actual parameter 1
src\io\io.c(180) : warning C4047: 'initializing' : 'const PIOHANDLE'
differs in levels of indirection from 'int'
C:\Program Files\Microsoft Visual Studio
9.0\VC\INCLUDE\io.h(308) : see declaration of 'dup'
src\io\io.c(189) : warning C4047: '==' : 'const PIOHANDLE' differs in
levels of indirection from 'int'
The offending code in F<src/io/io.c> is:
ParrotIO * const io = PMC_data_typed(pmc, ParrotIO *);
const PIOHANDLE newfd = dup(io->fd);
and
if (newfd == -1) {
real_exception(interp, NULL, 1, "could not dup an fd");
}
With ParrotIO.fd declared as:
struct _ParrotIO {
PIOHANDLE fd; /* Low level OS descriptor */
...
};
The code makes sense if C<PIOHANDLE> is a C<int> file descriptor, but it
might be something else.
#ifdef PIO_OS_WIN32
typedef Parrot_WIN32_HANDLE PIOHANDLE;
typedef Parrot_OFF_T PIOOFF_T;
#endif
#ifdef PIO_OS_UNIX
/* Hopefully INTVAL_SIZE is enough for PTR_SIZE so that
* the FILE* of pio_stdio_layers fit into a PIOHANDLE. */
typedef INTVAL PIOHANDLE;
typedef off_t PIOOFF_T;
#endif
#ifdef PIO_OS_STDIO
typedef FILE* PIOHANDLE;
typedef long PIOOFF_T;
#endif
C<dup> and comparison with C<-1> don't make sense if C<PIOHANDLE> is a
Windows C<HANDLE> or a C<FILE *>.