unreferencing pointers

Ty Young youngty1997 at gmail.com
Tue Dec 17 11:03:57 UTC 2019


On 12/17/19 4:31 AM, Maurizio Cimadamore wrote:
>
> On 17/12/2019 08:32, Ty Young wrote:
>> Hi,
>>
>>
>> Thanks to the LLVM 9 commit I've been able to create bindings for 
>> jextract. Problem is that the libusb API utilizes "unreference" 
>> variables to store the list of USB devices at it's entry pointer.
>>
>>
>> From the "In a nutshell..." section:
>>
>>
>> libusb_device **list;
>>
>> libusb_device *found = NULL;
>>
>> ssize_t cnt = libusb_get_device_list(NULL, &list);
>>
>>
>> ...which -unless I'm missing something- doesn't work in Java since 
>> variables have to be declared as *something* and declaring it as null 
>> hits an internal NullPointerException check.
>>
>>
>> Is this an unsupported edge case or am I missing something?
>
> What is the Java code that corresponds to this?


In Java the function signature looks like:


long libusb_lib.libusb_get_device_list(Pointer<libusb_context> context, 
Pointer<Pointer<Pointer<libusb_h.libusb_device>>> devices);


Where long is the size of the devices list. First argument can be null, 
as documented.


> The one you are playing with. Is 'list' the variable you'd like to 
> start off with null? Note that that is not really what C does - when C 
> sees a blank declaration like that it would still allocate the space 
> to hold a pointer - so you must allocate, even if you don't see the 
> allocation in the corresponding C code.
>
> Maurizio
>
>>
>>
>> Thanks.
>>


More information about the panama-dev mailing list