diff --git a/Cargo.toml b/Cargo.toml index 58e0876..24c07f4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,5 +7,7 @@ edition = "2021" [dependencies] bytes = "1" -procfs = "0.14.1" tokio = { version = "1", features = ["full"] } + +[target.'cfg(target_os="linux")'.dependencies] +procfs = "0.14.1" diff --git a/src/lib.rs b/src/lib.rs index bbd1a96..c82c149 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -22,6 +22,8 @@ pub enum Error { MessageUnknown, MessageCorrupt, ConnectionReset, + ProcFs(String), + NotSupported, } impl PartialEq for Error { @@ -56,6 +58,14 @@ impl PartialEq for Error { ConnectionReset => true, _ => false, }, + ProcFs(a) => match other { + ProcFs(b) => a == b, + _ => false, + }, + NotSupported => match other { + NotSupported => true, + _ => false, + }, } } } diff --git a/src/refresh.rs b/src/refresh.rs index 2255e44..ebff676 100644 --- a/src/refresh.rs +++ b/src/refresh.rs @@ -1,8 +1,24 @@ use crate::message::PortDesc; -use procfs::process::FDTarget; -use std::collections::HashMap; +use crate::Error; + +#[cfg(not(target_os = "linux"))] +pub fn get_entries() -> Result, Error> { + Err(Error::NotSupported) +} + +#[cfg(target_os = "linux")] +pub fn get_entries() -> Result, Error> { + match get_entries_linux() { + Ok(v) => Ok(v), + Err(e) => Err(Error::ProcFs(format!("{:?}", e))), + } +} + +#[cfg(target_os = "linux")] +pub fn get_entries_linux() -> procfs::ProcResult> { + use procfs::process::FDTarget; + use std::collections::HashMap; -pub fn get_entries() -> procfs::ProcResult> { let all_procs = procfs::process::all_processes()?; // build up a map between socket inodes and process stat info. Ignore any