mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-29 12:07:46 +00:00
Merge pull request #5791 from sylvestre/handle-error
Handle better some errors
This commit is contained in:
commit
112eb21eb3
7 changed files with 54 additions and 8 deletions
|
@ -6,7 +6,7 @@
|
||||||
use std::io::{stdout, Read, Write};
|
use std::io::{stdout, Read, Write};
|
||||||
|
|
||||||
use uucore::display::Quotable;
|
use uucore::display::Quotable;
|
||||||
use uucore::encoding::{wrap_print, Data, Format};
|
use uucore::encoding::{wrap_print, Data, EncodeError, Format};
|
||||||
use uucore::error::{FromIo, UResult, USimpleError, UUsageError};
|
use uucore::error::{FromIo, UResult, USimpleError, UUsageError};
|
||||||
use uucore::format_usage;
|
use uucore::format_usage;
|
||||||
|
|
||||||
|
@ -174,6 +174,7 @@ pub fn handle_input<R: Read>(
|
||||||
wrap_print(&data, &s);
|
wrap_print(&data, &s);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
Err(EncodeError::InvalidInput) => Err(USimpleError::new(1, "error: invalid input")),
|
||||||
Err(_) => Err(USimpleError::new(
|
Err(_) => Err(USimpleError::new(
|
||||||
1,
|
1,
|
||||||
"error: invalid input (length must be multiple of 4 characters)",
|
"error: invalid input (length must be multiple of 4 characters)",
|
||||||
|
|
|
@ -11,11 +11,12 @@ use std::fmt;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::{stdin, stdout, BufRead, BufReader, BufWriter, Read, Write};
|
use std::io::{stdin, stdout, BufRead, BufReader, BufWriter, Read, Write};
|
||||||
use std::num::IntErrorKind;
|
use std::num::IntErrorKind;
|
||||||
|
use std::path::Path;
|
||||||
use std::str::from_utf8;
|
use std::str::from_utf8;
|
||||||
use unicode_width::UnicodeWidthChar;
|
use unicode_width::UnicodeWidthChar;
|
||||||
use uucore::display::Quotable;
|
use uucore::display::Quotable;
|
||||||
use uucore::error::{FromIo, UError, UResult};
|
use uucore::error::{set_exit_code, FromIo, UError, UResult};
|
||||||
use uucore::{format_usage, help_about, help_usage};
|
use uucore::{format_usage, help_about, help_usage, show_error};
|
||||||
|
|
||||||
const ABOUT: &str = help_about!("expand.md");
|
const ABOUT: &str = help_about!("expand.md");
|
||||||
const USAGE: &str = help_usage!("expand.md");
|
const USAGE: &str = help_usage!("expand.md");
|
||||||
|
@ -465,6 +466,12 @@ fn expand(options: &Options) -> UResult<()> {
|
||||||
let mut buf = Vec::new();
|
let mut buf = Vec::new();
|
||||||
|
|
||||||
for file in &options.files {
|
for file in &options.files {
|
||||||
|
if Path::new(file).is_dir() {
|
||||||
|
show_error!("{}: Is a directory", file);
|
||||||
|
set_exit_code(1);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
let mut fh = open(file)?;
|
let mut fh = open(file)?;
|
||||||
|
|
||||||
while match fh.read_until(b'\n', &mut buf) {
|
while match fh.read_until(b'\n', &mut buf) {
|
||||||
|
|
|
@ -73,9 +73,18 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
|
||||||
let stdin = stdin();
|
let stdin = stdin();
|
||||||
let lines = stdin.lock().lines();
|
let lines = stdin.lock().lines();
|
||||||
for line in lines {
|
for line in lines {
|
||||||
for number in line.unwrap().split_whitespace() {
|
match line {
|
||||||
print_factors_str(number, &mut w, print_exponents)
|
Ok(line) => {
|
||||||
.map_err_context(|| "write error".into())?;
|
for number in line.split_whitespace() {
|
||||||
|
print_factors_str(number, &mut w, print_exponents)
|
||||||
|
.map_err_context(|| "write error".into())?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
set_exit_code(1);
|
||||||
|
show_error!("error reading input: {}", e);
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ pub enum DecodeError {
|
||||||
|
|
||||||
pub enum EncodeError {
|
pub enum EncodeError {
|
||||||
Z85InputLenNotMultipleOf4,
|
Z85InputLenNotMultipleOf4,
|
||||||
|
InvalidInput,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub type DecodeResult = Result<Vec<u8>, DecodeError>;
|
pub type DecodeResult = Result<Vec<u8>, DecodeError>;
|
||||||
|
@ -148,8 +149,10 @@ impl<R: Read> Data<R> {
|
||||||
|
|
||||||
pub fn encode(&mut self) -> Result<String, EncodeError> {
|
pub fn encode(&mut self) -> Result<String, EncodeError> {
|
||||||
let mut buf: Vec<u8> = vec![];
|
let mut buf: Vec<u8> = vec![];
|
||||||
self.input.read_to_end(&mut buf).unwrap();
|
match self.input.read_to_end(&mut buf) {
|
||||||
encode(self.format, buf.as_slice())
|
Ok(_) => encode(self.format, buf.as_slice()),
|
||||||
|
Err(_) => Err(EncodeError::InvalidInput),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,3 +18,16 @@ fn test_z85_not_padded() {
|
||||||
.fails()
|
.fails()
|
||||||
.stderr_only("basenc: error: invalid input (length must be multiple of 4 characters)\n");
|
.stderr_only("basenc: error: invalid input (length must be multiple of 4 characters)\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_invalid_input() {
|
||||||
|
let error_message = if cfg!(windows) {
|
||||||
|
"basenc: .: Permission denied\n"
|
||||||
|
} else {
|
||||||
|
"basenc: error: invalid input\n"
|
||||||
|
};
|
||||||
|
new_ucmd!()
|
||||||
|
.args(&["--base32", "."])
|
||||||
|
.fails()
|
||||||
|
.stderr_only(error_message);
|
||||||
|
}
|
||||||
|
|
|
@ -409,3 +409,11 @@ int main() {
|
||||||
",
|
",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_expand_directory() {
|
||||||
|
new_ucmd!()
|
||||||
|
.args(&["."])
|
||||||
|
.fails()
|
||||||
|
.stderr_contains("expand: .: Is a directory");
|
||||||
|
}
|
||||||
|
|
|
@ -1258,3 +1258,8 @@ const PRIMES50: &[u64] = &[
|
||||||
1125899906841623,
|
1125899906841623,
|
||||||
1125899906841613,
|
1125899906841613,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn fails_on_directory() {
|
||||||
|
new_ucmd!().pipe_in(".").fails();
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue