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

Re: Windows doesn't recognize ssize_t XS typemap

Thread Previous | Thread Next
Karl Williamson
February 9, 2018 16:13
Re: Windows doesn't recognize ssize_t XS typemap
Message ID:
On 02/09/2018 07:22 AM, Dagfinn Ilmari Mannsåker wrote:
> (Dagfinn Ilmari Mannsåker) writes:
>> Karl Williamson <> writes:
>>> The available typemaps displayed on Linux include ssize_t, but Windows
>>> doesn't like it.  Any ideas, or should I file a ticket?
>> The ssize_t type is not specified by ISO C (only POSIX) and is not
>> provided by MSVC.  You should use the metaconfig-provided SSize_t
>> instead.
> However, the default typemap does not include Size_t or SSize_t.  I
> propose adding these, so we can have portable signed sizes in XS.
> I've pushed this, plus changing all ssize_t-s in the code to SSize_t to
> the branch smoke-me/ilmari/SSize_t.
> 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».
> - ilmari

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.  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

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