unsafe { errno as i32 }
}
-pub fn error_string(_errno: i32) -> String {
- "operation failed".to_string()
+pub fn error_string(errno: i32) -> String {
+ extern {
+ fn strerror_r(errnum: libc::c_int, buf: *mut libc::c_char,
+ buflen: libc::size_t) -> libc::c_int;
+ }
+
+ let mut buf = [0 as libc::c_char; 1024];
+
+ let p = buf.as_mut_ptr();
+ unsafe {
+ if strerror_r(errno as libc::c_int, p, buf.len()) < 0 {
+ panic!("strerror_r failure");
+ }
+ str::from_utf8(CStr::from_ptr(p).to_bytes()).unwrap().to_owned()
+ }
}
pub fn getcwd() -> io::Result<PathBuf> {