copy strerror implementation into perror

This commit is contained in:
Paul Sajna
2018-03-08 11:20:13 -08:00
parent 6304595a1d
commit 22fb6c5bf0
2 changed files with 15 additions and 2 deletions
+1
View File
@@ -11,3 +11,4 @@ cbindgen = { path = "../../cbindgen" }
platform = { path = "../platform" }
va_list = { path = "../../va_list", features = ["no_std"] }
string = { path = "../string" }
errno = { path = "../errno"}
+14 -2
View File
@@ -5,12 +5,15 @@
extern crate platform;
extern crate va_list as vl;
extern crate string;
extern crate errno;
use core::str;
use core::fmt::Write;
use platform::types::*;
use platform::c_str;
use platform::errno;
use errno::STR_ERROR;
use vl::VaList as va_list;
mod printf;
@@ -207,12 +210,21 @@ pub extern "C" fn pclose(stream: *mut FILE) -> c_int {
#[no_mangle]
pub unsafe extern "C" fn perror(s: *const c_char) {
let strerror = string::strerror(platform::errno);
let mut buf: [u8; 256] = [0; 256];
let mut sw = platform::StringWriter(buf.as_mut_ptr(), buf.len());
if errno >= 0 && errno < STR_ERROR.len() as c_int {
sw.write_str(STR_ERROR[errno as usize]);
} else {
sw.write_fmt(format_args!("Unknown error {}", errno));
}
let mut w = platform::FileWriter(2);
w.write_fmt(format_args!(
"{}: {}\n",
str::from_utf8_unchecked(c_str(s)),
str::from_utf8_unchecked(c_str(strerror))
str::from_utf8_unchecked(c_str(buf.as_mut_ptr() as *mut c_char))
));
}