pcap_async/
pcap_util.rs

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