diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-21 22:15:01 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-21 22:17:37 +0300 |
| commit | 659badf106786f5611e750de0e4936e47c69a3d4 (patch) | |
| tree | 3cad8ed17a4e4d91d5e178e953a2349e6afa4b42 /src/platform | |
| parent | f7fa9486855c824bcd7e783e2d3eb4d12ad85205 (diff) | |
fix: avoid agent detection from runtime arguments
refs #238
Diffstat (limited to 'src/platform')
| -rw-r--r-- | src/platform/linux.rs | 8 | ||||
| -rw-r--r-- | src/platform/macos.rs | 9 | ||||
| -rw-r--r-- | src/platform/mod.rs | 1 |
3 files changed, 11 insertions, 7 deletions
diff --git a/src/platform/linux.rs b/src/platform/linux.rs index 269e3ad8..73a4f0a5 100644 --- a/src/platform/linux.rs +++ b/src/platform/linux.rs @@ -34,11 +34,13 @@ pub fn foreground_job(child_pid: u32) -> Option<ForegroundJob> { continue; } + let argv = process_argv(pid); processes.push(ForegroundProcess { pid, name, argv0: None, - cmdline: process_cmdline(pid), + cmdline: argv.as_ref().map(|parts| parts.join(" ")), + argv, }); } @@ -73,7 +75,7 @@ fn process_pgrp_and_comm(pid: u32) -> Option<(i32, String)> { Some((pgrp, comm)) } -fn process_cmdline(pid: u32) -> Option<String> { +fn process_argv(pid: u32) -> Option<Vec<String>> { let bytes = std::fs::read(format!("/proc/{pid}/cmdline")).ok()?; if bytes.is_empty() { return None; @@ -83,7 +85,7 @@ fn process_cmdline(pid: u32) -> Option<String> { .filter(|part| !part.is_empty()) .map(|part| String::from_utf8_lossy(part).into_owned()) .collect(); - (!parts.is_empty()).then(|| parts.join(" ")) + (!parts.is_empty()).then_some(parts) } /// Get the current working directory of a process. diff --git a/src/platform/macos.rs b/src/platform/macos.rs index 444f458d..add51aa4 100644 --- a/src/platform/macos.rs +++ b/src/platform/macos.rs @@ -32,11 +32,13 @@ pub fn foreground_job(child_pid: u32) -> Option<ForegroundJob> { let Some(name) = comm_from_bsdinfo(&info) else { continue; }; + let argv = process_argv(pid); processes.push(ForegroundProcess { pid, name, argv0: process_argv0_name(pid), - cmdline: process_cmdline(pid), + cmdline: argv.as_ref().map(|parts| parts.join(" ")), + argv, }); } @@ -462,10 +464,9 @@ fn comm_from_bsdinfo(info: &libc::proc_bsdinfo) -> Option<String> { String::from_utf8(bytes).ok() } -fn process_cmdline(pid: u32) -> Option<String> { +fn process_argv(pid: u32) -> Option<Vec<String>> { let buf = kern_procargs2(pid)?; - let argv = procargs2_argv(&buf)?; - Some(argv.join(" ")) + procargs2_argv(&buf) } fn procargs2_argv(buf: &[u8]) -> Option<Vec<String>> { diff --git a/src/platform/mod.rs b/src/platform/mod.rs index 8cf2b08d..a836ed81 100644 --- a/src/platform/mod.rs +++ b/src/platform/mod.rs @@ -8,6 +8,7 @@ pub struct ForegroundProcess { pub pid: u32, pub name: String, pub argv0: Option<String>, + pub argv: Option<Vec<String>>, pub cmdline: Option<String>, } |
