# New Ticket Created by  Benjamin Goldberg 
# Please include the string:  [perl #131399]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org/Ticket/Display.html?id=131399 >


There are lots of C APIs where a data structure has an array of pointers, with 
a NULL value indicating where that array ends.

It would be nice if I could tell NativeCall that some CArray returned by some C 
function is such an array, and prevent the user from reading the NULL, or 
anything beyond it.

This could also automatically append a NULL if necessary when a NativeCall 
managed CArray is passed to some C function.

For example:

    my $environ = cglobal( Str, ‘environ’, CArray[Str] is NULL-terminated );
    my %e = map split( ‘=’, *, 2 ), @$environ;


There are also C functions where the length is passed as a separate integer.  
It would be nice if, for this type of API, a CArray could be given an explicit 
length, which would then prevent the user from accidentally reading beyond the 
end of the array.

Perhaps something like:

    sub poll( CArray[pollfd] $fds, int32 $nfds, int32 timeout –> int32 is 
CArray-elems(‘$fds’) ) is native;

It would also be nice if CArray did the role Iterable, though obviously only if 
it’s NULL terminated or the length has been assigned to.

Reply via email to