Skip to content

Commit

Permalink
df: fix display of special characters
Browse files Browse the repository at this point in the history
Replace the display of certain special characters in `df`: ASCII space
for plain space character, ASCII horizontal tab for plain tab
character, and ASCII backslash for plain backslash character.

Co-authored-by: Jeffrey Finkelstein <jeffrey.finkelstein@protonmail.com>
  • Loading branch information
Yykz and jfinkels committed Jan 17, 2025
1 parent f39fdd2 commit a1d91ef
Showing 1 changed file with 38 additions and 2 deletions.
40 changes: 38 additions & 2 deletions src/uucore/src/lib/features/fsext.rs
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,18 @@ pub struct MountInfo {
pub dummy: bool,
}

fn replace_special_chars(s: String) -> String {

Check failure on line 140 in src/uucore/src/lib/features/fsext.rs

View workflow job for this annotation

GitHub Actions / Style and Lint (ubuntu-24.04, unix)

ERROR: `cargo clippy`: function `replace_special_chars` is never used (file:'src/uucore/src/lib/features/fsext.rs', line:140)
// Replace
//
// * ASCII space with a regular space character,
// * \011 ASCII horizontal tab with a tab character,
// * ASCII backslash with an actual backslash character.
//
s.replace(r#"\040"#, " ")
.replace(r#"\011"#, " ")
.replace(r#"\134"#, r#"\"#)
}

impl MountInfo {
#[cfg(any(target_os = "linux", target_os = "android"))]
fn new(file_name: &str, raw: &[&str]) -> Option<Self> {
Expand All @@ -158,14 +170,14 @@ impl MountInfo {
dev_name = raw[after_fields + 1].to_string();
fs_type = raw[after_fields].to_string();
mount_root = raw[3].to_string();
mount_dir = raw[4].to_string();
mount_dir = replace_special_chars(raw[4].to_string());
mount_option = raw[5].to_string();
}
LINUX_MTAB => {
dev_name = raw[0].to_string();
fs_type = raw[2].to_string();
mount_root = String::new();
mount_dir = raw[1].to_string();
mount_dir = replace_special_chars(raw[1].to_string());
mount_option = raw[3].to_string();
}
_ => return None,
Expand Down Expand Up @@ -1081,4 +1093,28 @@ mod tests {
assert_eq!(info.fs_type, "xfs");
assert_eq!(info.dev_name, "/dev/fs0");
}

#[test]
#[cfg(any(target_os = "linux", target_os = "android"))]
fn test_mountinfo_dir_special_chars() {
let info = MountInfo::new(
LINUX_MOUNTINFO,
&r#"317 61 7:0 / /mnt/f\134\040\011oo rw,relatime shared:641 - ext4 /dev/loop0 rw"#
.split_ascii_whitespace()
.collect::<Vec<_>>(),
)
.unwrap();

assert_eq!(info.mount_dir, r#"/mnt/f\ oo"#);

let info = MountInfo::new(
LINUX_MTAB,
&r#"/dev/loop0 /mnt/f\134\040\011oo ext4 rw,relatime 0 0"#
.split_ascii_whitespace()
.collect::<Vec<_>>(),
)
.unwrap();

assert_eq!(info.mount_dir, r#"/mnt/f\ oo"#);
}
}

0 comments on commit a1d91ef

Please sign in to comment.