загоны Сишечки и Раста с указателями
Форум — Development
Есть либа net-snmp, есть что-то типа биндинга к расту. Окей, пробуем поюзать.
Есть функция
C:
extern oid *snmp_parse_oid(const char *, oid *, size_t *)
//
const char *_oid_str = "1.3.6.1.2.1.1.5.0";
oid _oid[MAX_OID_LEN];
size_t _oid_len = MAX_OID_LEN;
if (snmp_parse_oid(_oid_str, _oid, &_oid_len) != NULL) {
// and so on...
}
pub extern "C" fn snmp_parse_oid(arg1: *const raw::c_char, arg2: *mut oid, arg3: *mut libc::size_t) -> *mut oid
//
let oid_str = "1.3.6.1.2.1.1.5.0";
let mut _oid: Vec<oid> = vec![0; MAX_OID_LEN];
let mut _oid_len: size_t = MAX_OID_LEN;
let p_oid_len = &mut _oid_len as *mut size_t;
if snmp_parse_oid(oid_str.as_ptr() as *const c_char, _oid.as_mut_ptr(), p_oid_len) != null_mut() {
// and so on...
}
Скорее всего не так указатели передаю на буфер и его размер.
Где-то я видать не допонял этих извращений с владением.
При поиске какой-то инфы как работать с указателями в rust'е с С'шным кодом - всё в оф.доку сводится.
А там &a. Только вот нихрена это не *mut a. Про такие конструкции не могу инфу найти.
Может подскажете что?