1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
use crate::errors::Error; use libc; use log::*; use std; #[inline] pub fn check_libpcap_error(handle: *mut pcap_sys::pcap_t, success: bool) -> Result<(), Error> { if success { Ok(()) } else { Err(convert_libpcap_error(handle)) } } #[inline] pub fn convert_libpcap_error(handle: *mut pcap_sys::pcap_t) -> Error { let error = unsafe { pcap_sys::pcap_geterr(handle) }; match cstr_to_string(error as _) { Err(e) => e, Ok(err) => { error!("LibPcap encountered an error: {}", err); Error::LibPcapError(err) } } } #[inline] pub fn cstr_to_string(err: *mut std::os::raw::c_char) -> Result<String, Error> { if err.is_null() { Err(Error::NullPtr) } else { unsafe { std::ffi::CStr::from_ptr(err) } .to_str() .map_err(Error::Utf8) .map(|s| s.to_owned()) } }