-
Notifications
You must be signed in to change notification settings - Fork 8
Description
Program:
use Win32API::File ();
close STDIN;
printf("INVALID_HANDLE_VALUE = 0x%x\nFdGetOsFHandle = 0x%x\n",
Win32API::File::INVALID_HANDLE_VALUE,
Win32API::File::FdGetOsFHandle(0));I expected the two handle values to be equal, since the FdGetOsFHandle pod
documentation says, on failure, "C<$hNativeHandle> is set to
C<INVALID_HANDLE_VALUE>". In strawberry-perl-5.32.1.1-64bit, the handles
are unequal. Program output:
INVALID_HANDLE_VALUE = 0xffffffff
FdGetOsFHandle = 0xffffffffffffffff
Equivalently, one can see this in a TAP test by adding t/closed.t with the
following content:
use Test::More;
use Win32API::File ();
plan tests => 1;
close STDIN;
is(Win32API::File::INVALID_HANDLE_VALUE, Win32API::File::FdGetOsFHandle(0));I get this behavior with the preinstalled module and also when building
https://github.com/chorny/Win32API-File in the
strawberry-perl-5.32.1.1-64bit environment.
Win32API::File::INVALID_HANDLE_VALUE is the value that C-level
INVALID_HANDLE_VALUE would have in a 32-bit binary, despite this being a
64-bit Perl.
The distribution has code, disabled by default, for regenerating the constants
(search for Myconst2perl and NO_REBUILD). Enabling that code yields one
error and a flurry of warnings:
...
const2perl.h:119:19: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
newconst( sName, "%"IVdf, iValue, newSViv(iValue) );
^
const2perl.h:122:19: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
newconst( sName, "%"IVdf, iValue, newSViv(iValue) );
^
const2perl.h:133:19: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix]
newconst( sName, "0x%"UVxf, (UV)(pValue), mpSvNew );
^
const2perl.h:99:5: error: extra qualification '_const2perl::' on member '_const2perl' [-fpermissive]
_const2perl::_const2perl( char *sModName ) {
^~~~~~~~~~~
File.xs: In function 'int main(int, char**, char**)':
const2perl.h:143:63: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
#define START_CONSTS( sModName ) _const2perl const2( sModName );
^
File.xs:28:5: note: in expansion of macro 'START_CONSTS'
#if (PERL_REVISION <= 5 && PERL_VERSION < 5) || defined(__CYGWIN__)
^~~~~~~~~~~~
const2perl.h:144:60: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
#define const2perl( const ) const2.mkconst( #const, const )
^
File.xs:40:5: note: in expansion of macro 'const2perl'
# undef _open_osfhandle /* stolen_open_osfhandle() isn't available here */
^~~~~~~~~~
const2perl.h:144:60: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
#define const2perl( const ) const2.mkconst( #const, const )
^
...