pcap-async 0.4.1

Async/Stream Extensions for libpcap
Documentation
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())
    }
}