develooper Front page | perl.perl5.porters | Postings from February 2018

Re: Windows doesn't recognize ssize_t XS typemap

Thread Previous | Thread Next
February 9, 2018 16:29
Re: Windows doesn't recognize ssize_t XS typemap
Message ID:
Karl Williamson <> writes:

> On 02/09/2018 07:22 AM, Dagfinn Ilmari Mannsåker wrote:
>> (Dagfinn Ilmari Mannsåker) writes:
>> On the other hand, I don't understand the reasoning behind making the
>> parameter in XS::APITest::test_utf8_to_bytes() signed.  utf8_to_bytes()
>> takes a STRLEN*, so the ssize_t (or SSize_t) parameter causes a compiler
>> warning.  The commit message that made the change just says «For testing
>> purposes, this parameter should be signed when it comes from perl
>> space».
> Sorry about that. I will add comments to the file.
> This showed up as a problem on testing a 64-bit machine with a 32-bit
> ptr size.

The "bitness" of a machine is usually taken to mean the pointer size. I
presume you mean a 32bit machine with perl configured to use 64bit

> utf8_to_bytes is passed a STRLEN*.  When it finds an error in the
> operation it returns -1 cast to STRLEN.  In the test file, because of
> the disparity between the sizes that got returned to perl space as
> 0xFFFFFFFF instead of -1.
> If there's a better way to handle this, I'm all ears

If the function uses -1 to signal errors, the parameter should be of a
signed type.

BTW, as mentioned on IRC, the pointee signedness mismatch is fatal under

- ilmari
"A disappointingly low fraction of the human race is,
 at any given time, on fire." - Stig Sandbeck Mathisen

Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About