Merge branch 'master' of https://github.com/redox-os/relibc
This commit is contained in:
@@ -62,6 +62,10 @@ pub fn fchdir(fildes: c_int) -> c_int {
|
||||
e(unsafe { syscall!(FCHDIR, fildes) }) as c_int
|
||||
}
|
||||
|
||||
pub fn fork() -> pid_t {
|
||||
e(unsafe {syscall!(FORK) }) as pid_t
|
||||
}
|
||||
|
||||
pub fn fsync(fildes: c_int) -> c_int {
|
||||
e(unsafe { syscall!(FSYNC, fildes) }) as c_int
|
||||
}
|
||||
@@ -114,6 +118,14 @@ pub fn open(path: *const c_char, oflag: c_int, mode: mode_t) -> c_int {
|
||||
e(unsafe { syscall!(OPENAT, AT_FDCWD, path, oflag, mode) }) as c_int
|
||||
}
|
||||
|
||||
pub fn pipe(fildes: [c_int; 2]) -> c_int {
|
||||
e(unsafe { syscall!(PIPE2, fildes.as_ptr(), 0) }) as c_int
|
||||
}
|
||||
|
||||
pub fn read(fildes: c_int, buf: &[u8]) -> ssize_t {
|
||||
e(unsafe { syscall!(READ, fildes, buf.as_ptr(), buf.len()) }) as ssize_t
|
||||
}
|
||||
|
||||
pub fn write(fildes: c_int, buf: &[u8]) -> ssize_t {
|
||||
e(unsafe { syscall!(WRITE, fildes, buf.as_ptr(), buf.len()) }) as ssize_t
|
||||
}
|
||||
|
||||
@@ -63,6 +63,10 @@ pub fn fchdir(fd: c_int) -> c_int {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn fork() -> pid_t {
|
||||
e(unsafe { syscall::clone(0) }) as pid_t
|
||||
}
|
||||
|
||||
pub fn fsync(fd: c_int) -> c_int {
|
||||
e(syscall::fsync(fd as usize)) as c_int
|
||||
}
|
||||
@@ -119,6 +123,18 @@ pub fn open(path: *const c_char, oflag: c_int, mode: mode_t) -> c_int {
|
||||
e(syscall::open(path, (oflag as usize) | (mode as usize))) as c_int
|
||||
}
|
||||
|
||||
pub fn pipe(fds: [c_int; 2]) -> c_int {
|
||||
let mut usize_fds: [usize; 2] = [0; 2];
|
||||
let res = e(syscall::pipe2(&mut usize_fds));
|
||||
fds[0] = usize_fds[0] as c_int;
|
||||
fds[1] = usize_fds[1] as c_int;
|
||||
res as c_int
|
||||
}
|
||||
|
||||
pub fn read(fd: c_int, buf: &mut [u8]) -> ssize_t {
|
||||
e(syscall::read(fd as usize, buf)) as ssize_t
|
||||
}
|
||||
|
||||
pub fn write(fd: c_int, buf: &[u8]) -> ssize_t {
|
||||
e(syscall::write(fd as usize, buf)) as ssize_t
|
||||
}
|
||||
|
||||
@@ -10,3 +10,4 @@ cbindgen = { path = "../../cbindgen" }
|
||||
[dependencies]
|
||||
platform = { path = "../platform" }
|
||||
va_list = { path = "../../va_list", features = ["no_std"] }
|
||||
errno = { path = "../errno"}
|
||||
|
||||
+15
-3
@@ -4,10 +4,15 @@
|
||||
|
||||
extern crate platform;
|
||||
extern crate va_list as vl;
|
||||
extern crate errno;
|
||||
|
||||
use core::slice;
|
||||
use core::str;
|
||||
use core::fmt::Write;
|
||||
|
||||
use platform::types::*;
|
||||
use platform::c_str;
|
||||
use platform::errno;
|
||||
use errno::STR_ERROR;
|
||||
use vl::VaList as va_list;
|
||||
|
||||
mod printf;
|
||||
@@ -203,8 +208,15 @@ pub extern "C" fn pclose(stream: *mut FILE) -> c_int {
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn perror(s: *const c_char) {
|
||||
unimplemented!();
|
||||
pub unsafe extern "C" fn perror(s: *const c_char) {
|
||||
let s_str = str::from_utf8_unchecked(c_str(s));
|
||||
|
||||
let mut w = platform::FileWriter(2);
|
||||
if errno >= 0 && errno < STR_ERROR.len() as c_int {
|
||||
w.write_fmt(format_args!("{}: {}\n", s_str, STR_ERROR[errno as usize]));
|
||||
} else {
|
||||
w.write_fmt(format_args!("{}: Unknown error {}\n", s_str, errno));
|
||||
}
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
|
||||
@@ -140,7 +140,7 @@ pub extern "C" fn fdatasync(fildes: c_int) -> c_int {
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn fork() -> pid_t {
|
||||
unimplemented!();
|
||||
platform::fork()
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
@@ -295,7 +295,7 @@ pub extern "C" fn pause() -> c_int {
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn pipe(fildes: [c_int; 2]) -> c_int {
|
||||
unimplemented!();
|
||||
platform::pipe(fildes)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
@@ -324,7 +324,9 @@ pub extern "C" fn pwrite(
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn read(fildes: c_int, buf: *const c_void, nbyte: size_t) -> ssize_t {
|
||||
unimplemented!();
|
||||
use core::slice;
|
||||
let buf = unsafe { slice::from_raw_parts_mut(buf as *mut u8, nbyte as usize) };
|
||||
platform::read(fildes, buf)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
|
||||
Reference in New Issue
Block a user