From 21559bb503e8963c2a7efe8cf61bda01a9fab73b Mon Sep 17 00:00:00 2001 From: jD91mZM2 <me@krake.one> Date: Wed, 26 Sep 2018 16:40:23 +0200 Subject: [PATCH] Fix redox compilation --- src/platform/linux/mod.rs | 41 +++++++++++++++++------------------ src/platform/pal/mod.rs | 2 +- src/platform/redox/mod.rs | 45 ++++++++++++++++++++------------------- 3 files changed, 44 insertions(+), 44 deletions(-) diff --git a/src/platform/linux/mod.rs b/src/platform/linux/mod.rs index 08a6f4d1..5b3d8957 100644 --- a/src/platform/linux/mod.rs +++ b/src/platform/linux/mod.rs @@ -194,32 +194,31 @@ impl Pal for Sys { e(unsafe { syscall!(GETGID) }) as gid_t } - unsafe fn gethostname(mut name: *mut c_char, len: size_t) -> c_int { - // len only needs to be mutable on linux - let mut len = len; - - let mut uts = mem::uninitialized(); - let err = Sys::uname(&mut uts); - if err < 0 { - mem::forget(uts); - return err; - } - for c in uts.nodename.iter() { - if len == 0 { - break; + fn gethostname(mut name: *mut c_char, mut len: size_t) -> c_int { + unsafe { + let mut uts = mem::uninitialized(); + let err = Sys::uname(&mut uts); + if err < 0 { + mem::forget(uts); + return err; } - len -= 1; + for c in uts.nodename.iter() { + if len == 0 { + break; + } + len -= 1; - *name = *c; + *name = *c; - if *name == 0 { - // We do want to copy the zero also, so we check this after the copying. - break; - } + if *name == 0 { + // We do want to copy the zero also, so we check this after the copying. + break; + } - name = name.offset(1); + name = name.offset(1); + } + 0 } - 0 } fn getpgid(pid: pid_t) -> pid_t { diff --git a/src/platform/pal/mod.rs b/src/platform/pal/mod.rs index 9a3a2030..bd18cbab 100644 --- a/src/platform/pal/mod.rs +++ b/src/platform/pal/mod.rs @@ -71,7 +71,7 @@ pub trait Pal { fn getgid() -> gid_t; - unsafe fn gethostname(name: *mut c_char, len: size_t) -> c_int; + fn gethostname(name: *mut c_char, len: size_t) -> c_int; fn getpgid(pid: pid_t) -> pid_t; diff --git a/src/platform/redox/mod.rs b/src/platform/redox/mod.rs index 59a5edce..42cb72b9 100644 --- a/src/platform/redox/mod.rs +++ b/src/platform/redox/mod.rs @@ -11,8 +11,10 @@ use syscall::flag::*; use syscall::{self, Result}; use c_str::{CStr, CString}; +use fs::File; +use io; use header::dirent::dirent; -use header::errno::{EINVAL, ENOSYS}; +use header::errno::{EIO, EINVAL, ENOSYS}; use header::fcntl; const MAP_ANON: c_int = 1; //use header::sys_mman::MAP_ANON; @@ -423,31 +425,30 @@ impl Pal for Sys { e(syscall::getgid()) as gid_t } - unsafe fn gethostname(mut name: *mut c_char, len: size_t) -> c_int { - let fd = match RawFile::open( - &CString::new("/etc/hostname").unwrap(), - fcntl::O_RDONLY | fcntl::O_CLOEXEC, - 0, - ) { - Ok(fd) => fd, - Err(_) => return -1, - }; + fn gethostname(name: *mut c_char, len: size_t) -> c_int { + fn inner(name: &mut [u8]) -> io::Result<()> { + let mut file = File::open( + &CString::new("/etc/hostname").unwrap(), + fcntl::O_RDONLY | fcntl::O_CLOEXEC + )?; - let mut reader = FileReader(*fd); - for _ in 0..len { - match reader.read_u8() { - Ok(Some(b)) => { - *name = b as c_char; - name = name.offset(1); - } - Ok(None) => { - *name = 0; - break; + let mut read = 0; + loop { + match file.read(&mut name[read..])? { + 0 => break, + n => read += n } - Err(()) => return -1, + } + Ok(()) + } + + match inner(unsafe { slice::from_raw_parts_mut(name as *mut u8, len as usize) }) { + Ok(()) => 0, + Err(_) => unsafe { + errno = EIO; + -1 } } - 0 } fn getpgid(pid: pid_t) -> pid_t { -- GitLab