Paul Sajna 7 سال پیش
والد
کامیت
8b1222c3fb
3فایلهای تغییر یافته به همراه10 افزوده شده و 1 حذف شده
  1. 6 0
      platform/src/linux/mod.rs
  2. 3 0
      platform/src/redox/mod.rs
  3. 1 1
      src/unistd/src/lib.rs

+ 6 - 0
platform/src/linux/mod.rs

@@ -2,6 +2,12 @@ use types::*;
 
 const AT_FDCWD: c_int = -100;
 
+pub fn brk(addr: *const c_void) -> c_int {
+    unsafe {
+        syscall!(BRK, addr) as c_int
+    }
+}
+
 pub fn chdir(path: *const c_char) -> c_int {
     unsafe {
         syscall!(CHDIR, path) as c_int

+ 3 - 0
platform/src/redox/mod.rs

@@ -7,6 +7,9 @@ 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 brk(addr: *const c_void) -> {
+    syscall::brk(addr as usize)? as c_int
+
 pub fn chdir(path: *const c_char) -> c_int {
     syscall::chdir(cstr_to_slice(path))? as c_int
 }

+ 1 - 1
src/unistd/src/lib.rs

@@ -41,7 +41,7 @@ pub extern "C" fn alarm(seconds: c_uint) -> c_uint {
 
 #[no_mangle]
 pub extern "C" fn brk(addr: *mut c_void) -> c_int {
-    unimplemented!();
+    platform::brk(addr)
 }
 
 #[no_mangle]