Skip to content
Snippets Groups Projects
Unverified Commit e39d2d61 authored by Jeremy Soller's avatar Jeremy Soller Committed by GitHub
Browse files

Merge branch 'master' into rename

parents 57a17cb0 bbf5c34c
No related branches found
No related tags found
No related merge requests found
...@@ -115,6 +115,14 @@ pub fn getuid() -> uid_t { ...@@ -115,6 +115,14 @@ pub fn getuid() -> uid_t {
e(unsafe { syscall!(GETUID) }) e(unsafe { syscall!(GETUID) })
} }
pub fn kill(pid: pid_t, sig: c_int) -> c_int {
e(unsafe { syscall!(KILL, pid, sig) }) as c_int
}
pub fn killpg(pgrp: pid_t, sig: c_int) -> c_int {
e(unsafe { syscall!(KILL, -(pgrp as isize) as pid_t, sig) }) as c_int
}
pub fn link(path1: *const c_char, path2: *const c_char) -> c_int { pub fn link(path1: *const c_char, path2: *const c_char) -> c_int {
e(unsafe { syscall!(LINKAT, AT_FDCWD, path1, AT_FDCWD, path2, 0) }) as c_int e(unsafe { syscall!(LINKAT, AT_FDCWD, path1, AT_FDCWD, path2, 0) }) as c_int
} }
...@@ -174,3 +182,7 @@ pub fn waitpid(pid: pid_t, stat_loc: *mut c_int, options: c_int) -> pid_t { ...@@ -174,3 +182,7 @@ pub fn waitpid(pid: pid_t, stat_loc: *mut c_int, options: c_int) -> pid_t {
pub fn write(fildes: c_int, buf: &[u8]) -> 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 e(unsafe { syscall!(WRITE, fildes, buf.as_ptr(), buf.len()) }) as ssize_t
} }
pub fn clock_gettime(clk_id: clockid_t, tp: *mut timespec) -> c_int {
e(unsafe { syscall!(CLOCK_GETTIME, clk_id, tp) }) as c_int
}
...@@ -119,6 +119,14 @@ pub fn getuid() -> uid_t { ...@@ -119,6 +119,14 @@ pub fn getuid() -> uid_t {
e(syscall::getuid()) as pid_t e(syscall::getuid()) as pid_t
} }
pub fn kill(pid: pid_t, sig: c_int) -> c_int {
e(syscall::kill(pid, sig as usize)) as c_int
}
pub fn killpg(pgrp: pid_t, sig: c_int) -> c_int {
e(syscall::kill(-(pgrp as isize) as pid_t, sig as usize)) as c_int
}
pub fn link(path1: *const c_char, path2: *const c_char) -> c_int { pub fn link(path1: *const c_char, path2: *const c_char) -> c_int {
let path1 = unsafe { c_str(path1) }; let path1 = unsafe { c_str(path1) };
let path2 = unsafe { c_str(path2) }; let path2 = unsafe { c_str(path2) };
...@@ -232,3 +240,17 @@ pub fn waitpid(pid: pid_t, stat_loc: *mut c_int, options: c_int) -> pid_t { ...@@ -232,3 +240,17 @@ pub fn waitpid(pid: pid_t, stat_loc: *mut c_int, options: c_int) -> pid_t {
pub fn write(fd: c_int, buf: &[u8]) -> ssize_t { pub fn write(fd: c_int, buf: &[u8]) -> ssize_t {
e(syscall::write(fd as usize, buf)) as ssize_t e(syscall::write(fd as usize, buf)) as ssize_t
} }
pub fn clock_gettime(clk_id: clockid_t, tp: *mut timespec) -> c_int {
let mut redox_tp = unsafe { redox_timespec::from(&*tp) };
match e(syscall::clock_gettime(clk_id as usize, &mut redox_tp)) as c_int {
-1 => -1,
_ => {
unsafe {
(*tp).tv_sec = redox_tp.tv_sec;
(*tp).tv_nsec = redox_tp.tv_nsec as i64;
};
0
}
}
}
...@@ -68,6 +68,7 @@ pub type clockid_t = i32; ...@@ -68,6 +68,7 @@ pub type clockid_t = i32;
pub type timer_t = c_void; pub type timer_t = c_void;
#[repr(C)] #[repr(C)]
#[derive(Default)]
pub struct timespec { pub struct timespec {
pub tv_sec: time_t, pub tv_sec: time_t,
pub tv_nsec: c_long, pub tv_nsec: c_long,
......
...@@ -27,12 +27,12 @@ pub type sigset_t = sys_sigset_t; ...@@ -27,12 +27,12 @@ pub type sigset_t = sys_sigset_t;
#[no_mangle] #[no_mangle]
pub extern "C" fn kill(pid: pid_t, sig: c_int) -> c_int { pub extern "C" fn kill(pid: pid_t, sig: c_int) -> c_int {
unimplemented!(); platform::kill(pid, sig)
} }
#[no_mangle] #[no_mangle]
pub extern "C" fn killpg(pgrp: pid_t, sig: c_int) -> c_int { pub extern "C" fn killpg(pgrp: pid_t, sig: c_int) -> c_int {
unimplemented!(); platform::killpg(pgrp, sig)
} }
#[no_mangle] #[no_mangle]
......
...@@ -4,3 +4,7 @@ language = "C" ...@@ -4,3 +4,7 @@ language = "C"
[enum] [enum]
prefix_with_name = true prefix_with_name = true
[defines]
"target_os = linux" = "__linux__"
"target_os = redox" = "__redox__"
...@@ -6,6 +6,33 @@ extern crate platform; ...@@ -6,6 +6,33 @@ extern crate platform;
use platform::types::*; use platform::types::*;
#[cfg(target_os = "redox")]
pub const CLOCK_REALTIME: c_int = 1;
#[cfg(target_os = "redox")]
pub const CLOCK_MONOTONIC: c_int = 4;
#[cfg(target_os = "linux")]
pub const CLOCK_REALTIME: c_int = 0;
#[cfg(target_os = "linux")]
pub const CLOCK_MONOTONIC: c_int = 1;
#[cfg(target_os = "linux")]
pub const CLOCK_PROCESS_CPUTIME_ID: c_int = 2;
#[cfg(target_os = "linux")]
pub const CLOCK_THREAD_CPUTIME_ID: c_int = 3;
#[cfg(target_os = "linux")]
pub const CLOCK_MONOTONIC_RAW: c_int = 4;
#[cfg(target_os = "linux")]
pub const CLOCK_REALTIME_COARSE: c_int = 5;
#[cfg(target_os = "linux")]
pub const CLOCK_MONOTONIC_COARSE: c_int = 6;
#[cfg(target_os = "linux")]
pub const CLOCK_BOOTTIME: c_int = 7;
#[cfg(target_os = "linux")]
pub const CLOCK_REALTIME_ALARM: c_int = 8;
#[cfg(target_os = "linux")]
pub const CLOCK_BOOTTIME_ALARM: c_int = 9;
#[cfg(target_os = "linux")]
pub const CLOCK_TAI: c_int = 11;
/* /*
*#[repr(C)] *#[repr(C)]
*pub struct timespec { *pub struct timespec {
...@@ -59,7 +86,7 @@ pub extern "C" fn clock_getres(clock_id: clockid_t, res: *mut timespec) -> c_int ...@@ -59,7 +86,7 @@ pub extern "C" fn clock_getres(clock_id: clockid_t, res: *mut timespec) -> c_int
#[no_mangle] #[no_mangle]
pub extern "C" fn clock_gettime(clock_id: clockid_t, tp: *mut timespec) -> c_int { pub extern "C" fn clock_gettime(clock_id: clockid_t, tp: *mut timespec) -> c_int {
unimplemented!(); platform::clock_gettime(clock_id, tp)
} }
#[no_mangle] #[no_mangle]
...@@ -134,7 +161,14 @@ pub extern "C" fn strptime(buf: *const c_char, format: *const c_char, tm: *mut t ...@@ -134,7 +161,14 @@ pub extern "C" fn strptime(buf: *const c_char, format: *const c_char, tm: *mut t
#[no_mangle] #[no_mangle]
pub extern "C" fn time(tloc: *mut time_t) -> time_t { pub extern "C" fn time(tloc: *mut time_t) -> time_t {
unimplemented!(); let mut ts: timespec = Default::default();
platform::clock_gettime(CLOCK_REALTIME, &mut ts);
unsafe {
if !tloc.is_null() {
*tloc = ts.tv_sec
};
}
ts.tv_sec
} }
#[no_mangle] #[no_mangle]
......
...@@ -48,4 +48,4 @@ ...@@ -48,4 +48,4 @@
/unlink /unlink
/waitpid /waitpid
/write /write
/time
...@@ -42,7 +42,8 @@ EXPECT_BINS=\ ...@@ -42,7 +42,8 @@ EXPECT_BINS=\
unistd/getopt \ unistd/getopt \
unlink \ unlink \
waitpid \ waitpid \
write write \
time
# Binaries that may generate varied output # Binaries that may generate varied output
BINS=\ BINS=\
......
#include <time.h>
#include <stdio.h>
int main(int argc, char** argv) {
timespec tm = {0, 0};
clock_gettime(CLOCK_REALTIME, &tm);
perror("clock_gettime");
time(NULL);
perror("time");
return 0;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment