Fix redox compilation

This commit is contained in:
jD91mZM2
2018-09-26 16:40:23 +02:00
parent afc1ff134a
commit 21559bb503
3 changed files with 44 additions and 44 deletions
+20 -21
View File
@@ -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 {
+1 -1
View File
@@ -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;
+23 -22
View File
@@ -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);
let mut read = 0;
loop {
match file.read(&mut name[read..])? {
0 => break,
n => read += n
}
Ok(None) => {
*name = 0;
break;
}
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 {