lsmem: improve Windows compatability

This commit is contained in:
Foorack 2025-02-09 17:44:52 +01:00
parent 5774bac639
commit 657a88db20

@ -348,7 +348,7 @@ impl Options {
split_by_removable: false,
split_by_state: false,
split_by_zones: false,
sysmem: String::from(PATH_SYS_MEMORY),
sysmem: Path::new(PATH_SYS_MEMORY).display().to_string(),
have_nodes: false,
have_zones: false,
@ -362,16 +362,23 @@ impl Options {
fn read_info(lsmem: &mut Lsmem, opts: &mut Options) {
let path_block_size = Path::new(&opts.sysmem).join(PATH_SUB_BLOCK_SIZE_BYTES);
lsmem.block_size = u64::from_str_radix(
&read_file_content::<String>(path_block_size.as_path()).unwrap(),
&read_file_content::<String>(path_block_size.as_path())
.expect("Failed to read memory block size"),
16,
)
.unwrap();
lsmem.dirs = get_block_paths(opts);
lsmem.dirs.sort_by(|a, b| {
let filename_a = a.to_str().unwrap().split('/').last().unwrap();
let filename_b = b.to_str().unwrap().split('/').last().unwrap();
let idx_a: u64 = filename_a[PATH_NAME_MEMORY.len()..].parse().unwrap();
let idx_b: u64 = filename_b[PATH_NAME_MEMORY.len()..].parse().unwrap();
let filename_a = a.file_name().expect("Failed parsing memory block name");
let filename_a = filename_a.to_str().unwrap();
let filename_b = b.file_name().expect("Failed parsing memory block name");
let filename_b = filename_b.to_str().unwrap();
let idx_a: u64 = filename_a[PATH_NAME_MEMORY.len()..]
.parse()
.expect("Failed to parse memory block index");
let idx_b: u64 = filename_b[PATH_NAME_MEMORY.len()..]
.parse()
.expect("Failed to parse memory block index");
idx_a.cmp(&idx_b)
});
lsmem.ndirs = lsmem.dirs.len();
@ -412,7 +419,7 @@ fn get_block_paths(opts: &mut Options) -> Vec<PathBuf> {
for entry in fs::read_dir(&opts.sysmem).unwrap() {
let entry = entry.unwrap();
let path = entry.path();
let filename = path.to_str().unwrap().split('/').last().unwrap();
let filename = path.file_name().unwrap().to_str().unwrap();
if path.is_dir() && filename.starts_with(PATH_NAME_MEMORY) {
paths.push(path);
}
@ -458,7 +465,7 @@ fn memory_block_get_node(path: &PathBuf) -> Result<i32, <i32 as FromStr>::Err> {
for entry in fs::read_dir(path).unwrap() {
let entry = entry.unwrap();
let path = entry.path();
let filename = path.to_str().unwrap().split('/').last().unwrap();
let filename = path.file_name().unwrap().to_str().unwrap();
if path.is_dir() && filename.starts_with(PATH_NAME_NODE) {
return filename[PATH_NAME_NODE.len()..].parse();
}
@ -470,7 +477,7 @@ fn memory_block_read_attrs(opts: &Options, path: &PathBuf) -> MemoryBlock {
let mut blk = MemoryBlock::new();
blk.count = 1;
blk.state = MemoryState::Unknown;
let filename = path.to_str().unwrap().split('/').last().unwrap();
let filename = path.file_name().unwrap().to_str().unwrap();
blk.index = filename[PATH_NAME_MEMORY.len()..].parse().unwrap();
let mut removable_path = path.clone();
@ -778,11 +785,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
}
if let Some(sysroot) = matches.get_one::<String>(options::SYSROOT) {
opts.sysmem = format!(
"{}/{}",
sysroot.trim_end_matches('/'),
opts.sysmem.trim_start_matches('/')
);
opts.sysmem = Path::new(sysroot).join(opts.sysmem).display().to_string();
}
read_info(&mut lsmem, &mut opts);