Compare commits
2 Commits
b356ac522f
...
d87b5d0958
Author | SHA1 | Date |
---|---|---|
Emma Tebibyte | d87b5d0958 | |
Emma Tebibyte | 1891c3e1aa |
|
@ -27,7 +27,7 @@ extern crate strerror;
|
|||
extern crate sysexits;
|
||||
|
||||
use getopt::{ Opt, Parser };
|
||||
use strerror::raw_message;
|
||||
use strerror::StrError;
|
||||
use sysexits::{ EX_DATAERR, EX_IOERR, EX_UNAVAILABLE, EX_USAGE };
|
||||
|
||||
fn main() {
|
||||
|
@ -77,7 +77,7 @@ fn main() {
|
|||
.stdout(Stdio::piped())
|
||||
.spawn()
|
||||
.unwrap_or_else( |e| {
|
||||
eprintln!("{}: {}: {}", argv[0], argv[command_arg], raw_message(e));
|
||||
eprintln!("{}: {}: {}", argv[0], argv[command_arg], e.strerror());
|
||||
exit(EX_UNAVAILABLE);
|
||||
});
|
||||
|
||||
|
@ -96,7 +96,7 @@ fn main() {
|
|||
}
|
||||
|
||||
let output = spawned.wait_with_output().unwrap_or_else(|e| {
|
||||
eprintln!("{}: {}: {}", argv[0], argv[command_arg], raw_message(e));
|
||||
eprintln!("{}: {}: {}", argv[0], argv[command_arg], e.strerror());
|
||||
exit(EX_IOERR);
|
||||
});
|
||||
|
||||
|
@ -114,7 +114,7 @@ fn main() {
|
|||
stdout().write_all(
|
||||
fields.join(&d.to_string()).as_bytes()
|
||||
).unwrap_or_else(|e| {
|
||||
eprintln!("{}: {}", argv[0], raw_message(e));
|
||||
eprintln!("{}: {}", argv[0], e.strerror());
|
||||
exit(EX_IOERR);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ use std::{
|
|||
extern crate strerror;
|
||||
extern crate sysexits;
|
||||
|
||||
use strerror::raw_message;
|
||||
use strerror::StrError;
|
||||
use sysexits::{ EX_DATAERR, EX_IOERR, EX_SOFTWARE };
|
||||
|
||||
const LIST: [(u32, &str); 10] = [
|
||||
|
@ -100,7 +100,7 @@ fn main() -> ExitCode {
|
|||
|
||||
stdout().write_all(format!("{} {}\n", out, si_prefix).as_bytes())
|
||||
.unwrap_or_else(|e| {
|
||||
eprintln!("{}: {}", argv[0], raw_message(e));
|
||||
eprintln!("{}: {}", argv[0], e.strerror());
|
||||
exit(EX_IOERR);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -9,19 +9,23 @@
|
|||
|
||||
use std::ffi::{ c_int, c_char, CStr };
|
||||
|
||||
/* binding to strerror(3p) */
|
||||
extern "C" { fn strerror(errnum: c_int) -> *mut c_char; }
|
||||
pub trait StrError { fn strerror(&self) -> String; }
|
||||
|
||||
/* wrapper function for use in Rust */
|
||||
pub fn raw_message(err: std::io::Error) -> String {
|
||||
/* Get the raw OS error. If it’s None, what the hell is going on‽ */
|
||||
let errno = err.raw_os_error().unwrap_or(0) as c_int;
|
||||
impl StrError for std::io::Error {
|
||||
/* wrapper function for use in Rust */
|
||||
fn strerror(&self) -> String {
|
||||
/* Get the raw OS error. If it’s None, what the hell is going on‽ */
|
||||
let errno = self.raw_os_error().unwrap_or(0) as c_int;
|
||||
|
||||
/* Get a CStr from the error message so that it’s referenced and then
|
||||
* convert it to an owned value. If the string is not valid UTF-8, return
|
||||
* that error instead. */
|
||||
match unsafe { CStr::from_ptr(strerror(errno)) }.to_str() {
|
||||
Ok(s) => s.to_owned(), // yay!! :D
|
||||
Err(e) => e.to_string(), // awww :(
|
||||
/* Get a CStr from the error message so that it’s referenced and then
|
||||
* convert it to an owned value. If the string is not valid UTF-8,
|
||||
* return that error instead. */
|
||||
match unsafe { CStr::from_ptr(strerror(errno)) }.to_str() {
|
||||
Ok(s) => s.to_owned(), // yay!! :D
|
||||
Err(e) => e.to_string(), // awww :(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* binding to strerror(3p) */
|
||||
extern "C" { fn strerror(errnum: c_int) -> *mut c_char; }
|
||||
|
|
Loading…
Reference in New Issue