소스 검색

Fix signal support

Jeremy Soller 6 년 전
부모
커밋
0aaa7264db
5개의 변경된 파일8개의 추가작업 그리고 25개의 파일을 삭제
  1. 1 0
      src/header/signal/linux.rs
  2. 0 1
      src/header/signal/mod.rs
  3. 1 0
      src/header/signal/redox.rs
  4. 0 18
      src/header/sys_time/mod.rs
  5. 6 6
      src/platform/redox/signal.rs

+ 1 - 0
src/header/signal/linux.rs

@@ -54,6 +54,7 @@ pub const SIGPOLL: usize = SIGIO;
 pub const SIGPWR: usize = 30;
 pub const SIGSYS: usize = 31;
 pub const SIGUNUSED: usize = SIGSYS;
+pub const NSIG: usize = 32;
 
 pub const SA_NOCLDSTOP: usize = 1;
 pub const SA_NOCLDWAIT: usize = 2;

+ 0 - 1
src/header/signal/mod.rs

@@ -36,7 +36,6 @@ pub struct sigaction {
     pub sa_mask: sigset_t,
 }
 
-pub const NSIG: usize = 64;
 pub type sigset_t = c_ulong;
 
 #[no_mangle]

+ 1 - 0
src/header/signal/redox.rs

@@ -51,6 +51,7 @@ pub const SIGWINCH: usize = 28;
 pub const SIGIO: usize = 29;
 pub const SIGPWR: usize = 30;
 pub const SIGSYS: usize = 31;
+pub const NSIG: usize = 32;
 
 pub const SA_NOCLDSTOP: usize = 0x00000001;
 pub const SA_NOCLDWAIT: usize = 0x00000002;

+ 0 - 18
src/header/sys_time/mod.rs

@@ -53,17 +53,6 @@ pub extern "C" fn gettimeofday(tp: *mut timeval, tzp: *mut timezone) -> c_int {
     Sys::gettimeofday(tp, tzp)
 }
 
-// #[no_mangle]
-pub extern "C" fn select(
-    nfds: c_int,
-    readfds: *mut fd_set,
-    writefds: *mut fd_set,
-    errorfds: *mut fd_set,
-    timeout: *mut timeval,
-) -> c_int {
-    unimplemented!();
-}
-
 #[no_mangle]
 pub unsafe extern "C" fn utimes(path: *const c_char, times: *const timeval) -> c_int {
     let path = CStr::from_ptr(path);
@@ -79,10 +68,3 @@ pub unsafe extern "C" fn utimes(path: *const c_char, times: *const timeval) -> c
     ];
     Sys::utimens(path, times_spec.as_ptr())
 }
-
-/*
-#[no_mangle]
-pub extern "C" fn func(args) -> c_int {
-    unimplemented!();
-}
-*/

+ 6 - 6
src/platform/redox/signal.rs

@@ -7,7 +7,7 @@ use super::super::{Pal, PalSignal};
 use super::{e, Sys};
 use header::errno::EINVAL;
 use header::signal::{sigaction, sigset_t};
-use header::sys_time::itimerval;
+use header::sys_time::{ITIMER_REAL, itimerval};
 
 impl PalSignal for Sys {
     fn getitimer(which: c_int, out: *mut itimerval) -> c_int {
@@ -20,7 +20,7 @@ impl PalSignal for Sys {
         };
 
         let fd = e(syscall::open(path, syscall::O_RDONLY | syscall::O_CLOEXEC));
-        if fd < 0 {
+        if fd == !0 {
             return -1;
         }
 
@@ -29,7 +29,7 @@ impl PalSignal for Sys {
 
         let _ = syscall::close(fd);
 
-        if count < 0 {
+        if count == !0 {
             return -1;
         }
 
@@ -65,7 +65,7 @@ impl PalSignal for Sys {
         };
 
         let fd = e(syscall::open(path, syscall::O_RDWR | syscall::O_CLOEXEC));
-        if fd < 0 {
+        if fd == !0 {
             return -1;
         }
 
@@ -73,7 +73,7 @@ impl PalSignal for Sys {
 
         let mut count = e(syscall::read(fd, &mut spec));
 
-        if count >= 0 {
+        if count != !0 {
             unsafe {
                 if ! old.is_null() {
                     (*old).it_interval.tv_sec = spec.it_interval.tv_sec;
@@ -93,7 +93,7 @@ impl PalSignal for Sys {
 
         let _ = syscall::close(fd);
 
-        if count < 0 {
+        if count == !0 {
             return -1;
         }