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

Re: Windows doesn't recognize ssize_t XS typemap

Thread Previous | Thread Next
From:
Karl Williamson
Date:
February 9, 2018 16:13
Subject:
Re: Windows doesn't recognize ssize_t XS typemap
Message ID:
931b93cf-1de7-418d-07ef-c492b342f440@khwilliamson.com
On 02/09/2018 07:22 AM, Dagfinn Ilmari Mannsåker wrote:
> ilmari@ilmari.org (Dagfinn Ilmari Mannsåker) writes:
> 
>> Karl Williamson <public@khwilliamson.com> 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


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About