hru(1): read stdin until EOF

This commit is contained in:
Emma Tebibyte 2024-02-13 17:48:25 -07:00
parent 1ee668aed6
commit d0205b71da
Signed by: emma
GPG Key ID: 06FA419A1698C270

View File

@ -52,35 +52,40 @@ fn convert(input: u64) -> (f64, u32) {
fn main() -> ExitCode { fn main() -> ExitCode {
let argv = args().collect::<Vec<String>>(); let argv = args().collect::<Vec<String>>();
let mut buf = String::new(); let mut buf = String::new();
let _ = stdin().read_line(&mut buf); while let Ok(_) = stdin().read_line(&mut buf) {
if buf.is_empty() { return ExitCode::SUCCESS; }
let n: u64 = match buf.trim().parse() { let n: u64 = match buf.trim().parse() {
Ok(f) => f, Ok(f) => {
Err(err) => { buf.clear();
eprintln!("{}: {}", argv[0], err); f
return ExitCode::from(EX_DATAERR as u8); },
}, Err(err) => {
}; eprintln!("{}: {}", argv[0], err);
return ExitCode::from(EX_DATAERR as u8);
},
};
let (number, prefix) = convert(n); let (number, prefix) = convert(n);
let si_prefix = format!("{}B", match prefix { let si_prefix = format!("{}B", match prefix {
3 => "K", 3 => "K",
6 => "M", 6 => "M",
9 => "G", 9 => "G",
12 => "T", 12 => "T",
15 => "P", 15 => "P",
18 => "E", 18 => "E",
21 => "Z", 21 => "Z",
24 => "Y", 24 => "Y",
27 => "R", 27 => "R",
30 => "Q", 30 => "Q",
_ => "", _ => "",
}); });
let out = ((number * 10.0).round() / 10.0).to_string(); let out = ((number * 10.0).round() / 10.0).to_string();
println!("{} {}", out, si_prefix); println!("{} {}", out, si_prefix);
}
ExitCode::SUCCESS ExitCode::SUCCESS
} }