czuckie
05/30/2023, 8:50 PMczuckie
05/30/2023, 8:50 PMtypedef struct opaque_struct opaque_t;
size_t do_something(opaque_t **output); // Returns number of elements that have been populated
void do_something_else(opaque_t *value);
// Where typical use would be something like:
opaque_t **result = NULL;
size_t elements = do_something(output);
for (int i = 0; i < elements; i++) {
do_something_else(result[i]);
}
czuckie
05/30/2023, 8:52 PMval result = zeroValue<CPointerVar<CPointerVar<opaque_t>>>()
val elements = do_something(result)
for (i in 0 until elements) {
do_something_else(/* what goes here */)
}
Landry Norris
05/30/2023, 9:21 PMczuckie
05/30/2023, 9:22 PMczuckie
05/30/2023, 9:22 PMLandry Norris
05/30/2023, 9:24 PMczuckie
05/30/2023, 9:25 PMLandry Norris
05/30/2023, 9:27 PMczuckie
05/30/2023, 9:30 PMval output = allocArray<CPointerVar<opaque_t>>(0)
Would that be what you would expect?Landry Norris
05/30/2023, 9:31 PMczuckie
05/30/2023, 9:32 PMLandry Norris
05/30/2023, 9:34 PMLandry Norris
05/30/2023, 9:38 PMczuckie
05/31/2023, 7:27 AMlibusb
. I ended up with
fun devices(): List<UsbDevice> {
return memScoped {
val deviceList: CPointer<CPointerVar<CPointerVar<libusb_device>>> = allocArray(22)
val deviceCount = libusb_get_device_list(null, deviceList.reinterpret())
val devices = mutableListOf<UsbDevice>()
for (i in 0 until deviceCount) {
deviceList.pointed.pointed!!.ptr[i]?.let { ptr ->
val desc: libusb_device_descriptor = alloc<libusb_device_descriptor>()
libusb_get_device_descriptor(ptr, desc.ptr)
devices.add(UsbDevice(desc.idVendor, desc.idProduct))
}
}
devices
}
}
czuckie
05/31/2023, 7:28 AM