Fix redox compilation
This commit is contained in:
+20
-21
@@ -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 {
|
||||
|
||||
@@ -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
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user