implement some unistd

This commit is contained in:
Paul Sajna
2018-03-04 06:37:45 -08:00
parent 4f5d65e7a6
commit d25b1d2fa4
3 changed files with 42 additions and 3 deletions
+18
View File
@@ -2,12 +2,30 @@ use types::*;
const AT_FDCWD: c_int = -100;
pub fn chdir(path: *const c_char) -> c_int {
unsafe {
syscall!(CHDIR, path) as c_int
}
}
pub fn close(fildes: c_int) -> c_int {
unsafe {
syscall!(CLOSE, fildes) as c_int
}
}
pub fn dup(fildes: c_int) -> c_int {
unsafe {
syscall!(DUP, fildes) as c_int
}
}
pub fn dup2(fildes: c_int, fildes2:c_int) -> c_int {
unsafe {
syscall!(DUP2, fildes, fildes2) as c_int
}
}
pub fn exit(status: c_int) -> ! {
unsafe {
syscall!(EXIT, status);
+21
View File
@@ -1,3 +1,24 @@
use core::slice;
pub unsafe fn cstr_to_slice<'a>(buf: *const c_char) -> &'a [u8] {
slice::from_raw_parts(buf as *const u8, ::strlen(buf) as usize)
}
pub fn chdir(path: *const c_char) -> c_int {
syscall::chdir(cstr_to_slice(path))? as c_int
}
pub fn close(fildes: c_int) -> c_int {
syscall::close(fildes as usize)? as c_int
}
pub fn dup(fildes: c_int) -> c_int {
syscall::dup(file as usize, &[])? as c_int
}
pub fn dup2(fildes: c_int, fildes2) -> c_int {
syscall::dup2(fildes as usize, fildes2 as usize, &[])? as c_int
pub fn exit(status: c_int) -> ! {
syscall::exit(status);
}
+3 -3
View File
@@ -46,7 +46,7 @@ pub extern "C" fn brk(addr: *mut c_void) -> c_int {
#[no_mangle]
pub extern "C" fn chdir(path: *const c_char) -> c_int {
unimplemented!();
platform::chdir(path)
}
#[no_mangle]
@@ -86,12 +86,12 @@ pub extern "C" fn cuserid(s: *mut c_char) -> *mut c_char {
#[no_mangle]
pub extern "C" fn dup(fildes: c_int) -> c_int {
unimplemented!();
platform::dup(fildes)
}
#[no_mangle]
pub extern "C" fn dup2(fildes: c_int, fildes2: c_int) -> c_int {
unimplemented!();
platform::dup2(fildes, fildes2)
}
#[no_mangle]