Add more special redox functions

This commit is contained in:
Jeremy Soller
2018-12-13 15:26:03 -07:00
parent c6d42dd9e3
commit 0d2332d368
2 changed files with 36 additions and 3 deletions
+4
View File
@@ -10,6 +10,10 @@ extern "C" {
#ifdef __redox__
ssize_t redox_fpath(int fd, void * buf, size_t count);
void * redox_physalloc(size_t size);
int redox_physfree(void * physical_address, size_t size);
void * redox_physmap(void * physical_address, size_t size, int flags);
int redox_physunmap(void * virtual_address);
#endif
+32 -3
View File
@@ -1,10 +1,39 @@
use core::slice;
use core::{ptr, slice};
use platform::sys::e;
use platform::types::*;
use super::e;
#[no_mangle]
pub unsafe extern "C" fn redox_fpath(fd: c_int, buf: *mut c_void, count: size_t) -> ssize_t {
e(syscall::fpath(fd as usize, slice::from_raw_parts_mut(buf as *mut u8, count))) as ssize_t
}
#[no_mangle]
pub unsafe extern "C" fn redox_physalloc(size: size_t) -> *mut c_void {
let res = e(syscall::physalloc(size));
if res == !0 {
return ptr::null_mut();
} else {
return res as *mut c_void
}
}
#[no_mangle]
pub unsafe extern "C" fn redox_physfree(physical_address: *mut c_void, size: size_t) -> c_int {
e(syscall::physfree(physical_address as usize, size)) as c_int
}
#[no_mangle]
pub unsafe extern "C" fn redox_physmap(physical_address: *mut c_void, size: size_t, flags: c_int) -> *mut c_void {
let res = e(syscall::physmap(physical_address as usize, size, flags as usize));
if res == !0 {
return ptr::null_mut();
} else {
return res as *mut c_void
}
}
#[no_mangle]
pub unsafe extern "C" fn redox_physunmap(virtual_address: *mut c_void) -> c_int {
e(syscall::physunmap(virtual_address as usize)) as c_int
}