libdivecomputer-sys 0.1.0

Unsafe bindings for libdivecomputer
Documentation
use std::ffi::{c_void, CStr};
use std::ptr;

use libdivecomputer_sys::{
    dc_descriptor_free, dc_descriptor_get_product, dc_descriptor_get_vendor,
    dc_descriptor_iterator, dc_descriptor_t, dc_iterator_free, dc_iterator_next, dc_iterator_t,
    dc_status_t_DC_STATUS_SUCCESS,
};

fn main() {
    unsafe {
        let mut iterator: *mut dc_iterator_t = ptr::null_mut();
        let mut descriptor: *mut dc_descriptor_t = ptr::null_mut();

        dc_descriptor_iterator(&mut iterator);
        while dc_iterator_next(iterator, &mut descriptor as *mut _ as *mut c_void)
            == dc_status_t_DC_STATUS_SUCCESS
        {
            let vendor = CStr::from_ptr(dc_descriptor_get_vendor(descriptor));
            let product = CStr::from_ptr(dc_descriptor_get_product(descriptor));

            println!("{} {}", vendor.to_string_lossy(), product.to_string_lossy());

            dc_descriptor_free(descriptor);
        }
        dc_iterator_free(iterator);
    }
}