@@ -11,7 +11,7 @@ use clap::value_parser;
1111use clap:: { Arg , ArgMatches , Command } ;
1212use std:: ffi:: { OsStr , OsString } ;
1313use std:: fs:: File ;
14- use std:: io:: { BufReader , Read , stdin} ;
14+ use std:: io:: { BufReader , Error , Read , stdin} ;
1515use std:: iter;
1616use std:: num:: ParseIntError ;
1717use std:: path:: Path ;
@@ -25,7 +25,7 @@ use uucore::checksum::detect_algo;
2525use uucore:: checksum:: digest_reader;
2626use uucore:: checksum:: escape_filename;
2727use uucore:: checksum:: perform_checksum_validation;
28- use uucore:: error:: { FromIo , UResult } ;
28+ use uucore:: error:: UResult ;
2929use uucore:: format_usage;
3030use uucore:: sum:: { Digest , Sha3_224 , Sha3_256 , Sha3_384 , Sha3_512 , Shake128 , Shake256 } ;
3131use uucore:: translate;
@@ -533,6 +533,12 @@ fn uu_app(binary_name: &str) -> (Command, bool) {
533533 ( command, is_hashsum_bin)
534534}
535535
536+ fn print_os_error ( binary_name : & str , filename : & str , os_error : & Error ) {
537+ let err_string = os_error. to_string ( ) ;
538+ let clean_err_string = err_string. split ( " (os error" ) . next ( ) . unwrap_or ( & err_string) ;
539+ eprintln ! ( "{binary_name}: {filename}: {clean_err_string}" ) ;
540+ }
541+
536542#[ allow( clippy:: cognitive_complexity) ]
537543fn hashsum < ' a , I > ( mut options : Options , files : I ) -> UResult < ( ) >
538544where
@@ -564,13 +570,20 @@ where
564570 } ,
565571 ) ;
566572
567- let ( sum, _ ) = digest_reader (
573+ let sum = match digest_reader (
568574 & mut options. digest ,
569575 & mut file,
570576 options. binary ,
571577 options. output_bits ,
572- )
573- . map_err_context ( || translate ! ( "hashsum-error-failed-to-read-input" ) ) ?;
578+ ) {
579+ Ok ( ( sum, _) ) => sum,
580+ Err ( e) => {
581+ print_os_error ( options. binary_name , & filename. to_string_lossy ( ) , & e) ;
582+ err_found = Some ( ChecksumError :: Io ( e) ) ;
583+ continue ;
584+ }
585+ } ;
586+
574587 let ( escaped_filename, prefix) = escape_filename ( filename) ;
575588 if options. tag {
576589 if options. algoname == "blake2b" {
0 commit comments