strerror(3): created strerror() method

This commit is contained in:
Emma Tebibyte 2024-03-18 21:30:43 -06:00
parent b356ac522f
commit 1891c3e1aa
Signed by: emma
GPG Key ID: 06FA419A1698C270
1 changed files with 16 additions and 12 deletions

View File

@ -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 its 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 its 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 its 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 its 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; }