From 36d93501c8af9251ae7f1bfb26017a57da0ce1cf Mon Sep 17 00:00:00 2001 From: Tools-app Date: Sat, 22 Nov 2025 09:18:07 +0800 Subject: [PATCH] Fix compile on x86_64 Co-authored-by: weishu Signed-off-by: Tools-app --- userspace/ksud/src/su.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/userspace/ksud/src/su.rs b/userspace/ksud/src/su.rs index d4f2756e..35e6e8e6 100644 --- a/userspace/ksud/src/su.rs +++ b/userspace/ksud/src/su.rs @@ -8,7 +8,12 @@ use libc::c_int; use log::{error, warn}; #[cfg(unix)] use std::os::unix::process::CommandExt; -use std::{env, ffi::CStr, path::PathBuf, process::Command}; +use std::{ + env, + ffi::{CStr, CString}, + path::PathBuf, + process::Command, +}; #[cfg(any(target_os = "linux", target_os = "android"))] use crate::ksucalls::get_wrapped_fd; @@ -230,10 +235,9 @@ pub fn root_shell() -> Result<()> { if free_idx < matches.free.len() { let name = &matches.free[free_idx]; uid = unsafe { - #[cfg(any(target_arch = "aarch64", target_arch = "arm"))] - let pw = libc::getpwnam(name.as_ptr()).as_ref(); - #[cfg(target_arch = "x86_64")] - let pw = libc::getpwnam(name.as_ptr() as *const i8).as_ref(); + let pw = CString::new(name.as_str()) + .ok() + .and_then(|c_name| libc::getpwnam(c_name.as_ptr()).as_ref()); pw.map_or_else(|| name.parse::().unwrap_or(0), |pw| pw.pw_uid) }