ソースを参照

Added some constants in linux for file modes in the new branch

Tom Almeida 7 年 前
コミット
8648fd39c4

+ 1 - 1
cbindgen

@@ -1 +1 @@
-Subproject commit d14295f3ca588f1d1752ea0a579f0597dd2ce248
+Subproject commit 95821b3bbe857354e3fb1efa96ed5252ecc3ec3e

+ 0 - 10
include/bits/signal.h

@@ -1,10 +0,0 @@
-#ifndef _BITS_SIGNAL_H
-#define _BITS_SIGNAL_H
-
-typedef struct sigaction {
-  void (*sa_handler)(uintptr_t);
-  sigset_t sa_mask;
-  uintptr_t sa_flags;
-};
-
-#endif

+ 6 - 52
src/fcntl/src/lib.rs

@@ -6,61 +6,15 @@ extern crate platform;
 
 use platform::types::*;
 
+pub use sys::*;
+
 #[cfg(target_os = "linux")]
-pub const O_RDONLY: c_int = 0x0000;
-#[cfg(target_os = "linux")]
-pub const O_WRONLY: c_int = 0x0001;
-#[cfg(target_os = "linux")]
-pub const O_RDWR: c_int = 0x0002;
-#[cfg(target_os = "linux")]
-pub const O_CREAT: c_int = 0x0040;
-#[cfg(target_os = "linux")]
-pub const O_TRUNC: c_int = 0x0200;
-#[cfg(target_os = "linux")]
-pub const O_ACCMODE: c_int = O_RDONLY | O_WRONLY | O_RDWR;
-#[cfg(target_os = "linux")]
-pub const O_APPEND: c_int = 0o2000;
-#[cfg(target_os = "linux")]
-pub const O_CLOEXEC: c_int = 0o2_000_000;
-#[cfg(target_os = "linux")]
-pub const O_EXCL: c_int = 0o200;
+#[path = "linux.rs"]
+pub mod sys;
 
 #[cfg(target_os = "redox")]
-pub const O_RDONLY: c_int = 0x0001_0000;
-#[cfg(target_os = "redox")]
-pub const O_WRONLY: c_int = 0x0002_0000;
-#[cfg(target_os = "redox")]
-pub const O_RDWR: c_int = 0x0003_0000;
-#[cfg(target_os = "redox")]
-pub const O_NONBLOCK: c_int = 0x0004_0000;
-#[cfg(target_os = "redox")]
-pub const O_APPEND: c_int = 0x0008_0000;
-#[cfg(target_os = "redox")]
-pub const O_SHLOCK: c_int = 0x0010_0000;
-#[cfg(target_os = "redox")]
-pub const O_EXLOCK: c_int = 0x0020_0000;
-#[cfg(target_os = "redox")]
-pub const O_ASYNC: c_int = 0x0040_0000;
-#[cfg(target_os = "redox")]
-pub const O_FSYNC: c_int = 0x0080_0000;
-#[cfg(target_os = "redox")]
-pub const O_CLOEXEC: c_int = 0x0100_0000;
-#[cfg(target_os = "redox")]
-pub const O_CREAT: c_int = 0x0200_0000;
-#[cfg(target_os = "redox")]
-pub const O_TRUNC: c_int = 0x0400_0000;
-#[cfg(target_os = "redox")]
-pub const O_EXCL: c_int = 0x0800_0000;
-#[cfg(target_os = "redox")]
-pub const O_DIRECTORY: c_int = 0x1000_0000;
-#[cfg(target_os = "redox")]
-pub const O_STAT: c_int = 0x2000_0000;
-#[cfg(target_os = "redox")]
-pub const O_SYMLINK: c_int = 0x4000_0000;
-#[cfg(target_os = "redox")]
-pub const O_NOFOLLOW: c_int = 0x8000_0000;
-#[cfg(target_os = "redox")]
-pub const O_ACCMODE: c_int = O_RDONLY | O_WRONLY | O_RDWR;
+#[path = "redox.rs"]
+pub mod sys;
 
 pub const F_DUPFD: c_int = 0;
 pub const F_GETFD: c_int = 1;

+ 11 - 0
src/fcntl/src/linux.rs

@@ -0,0 +1,11 @@
+use platform::types::*;
+
+pub const O_RDONLY: c_int = 0x0000;
+pub const O_WRONLY: c_int = 0x0001;
+pub const O_RDWR: c_int = 0x0002;
+pub const O_CREAT: c_int = 0x0040;
+pub const O_TRUNC: c_int = 0x0200;
+pub const O_ACCMODE: c_int = O_RDONLY | O_WRONLY | O_RDWR;
+pub const O_APPEND: c_int = 0o2000;
+pub const O_CLOEXEC: c_int = 0o2_000_000;
+pub const O_EXCL: c_int = 0o200;

+ 20 - 0
src/fcntl/src/redox.rs

@@ -0,0 +1,20 @@
+use platform::types::*;
+
+pub const O_RDONLY: c_int = 0x0001_0000;
+pub const O_WRONLY: c_int = 0x0002_0000;
+pub const O_RDWR: c_int = 0x0003_0000;
+pub const O_NONBLOCK: c_int = 0x0004_0000;
+pub const O_APPEND: c_int = 0x0008_0000;
+pub const O_SHLOCK: c_int = 0x0010_0000;
+pub const O_EXLOCK: c_int = 0x0020_0000;
+pub const O_ASYNC: c_int = 0x0040_0000;
+pub const O_FSYNC: c_int = 0x0080_0000;
+pub const O_CLOEXEC: c_int = 0x0100_0000;
+pub const O_CREAT: c_int = 0x0200_0000;
+pub const O_TRUNC: c_int = 0x0400_0000;
+pub const O_EXCL: c_int = 0x0800_0000;
+pub const O_DIRECTORY: c_int = 0x1000_0000;
+pub const O_STAT: c_int = 0x2000_0000;
+pub const O_SYMLINK: c_int = 0x4000_0000;
+pub const O_NOFOLLOW: c_int = 0x8000_0000;
+pub const O_ACCMODE: c_int = O_RDONLY | O_WRONLY | O_RDWR;

+ 1 - 1
src/signal/cbindgen.toml

@@ -1,6 +1,6 @@
 sys_includes = ["sys/types.h"]
 include_guard = "_SIGNAL_H"
-trailer = "#include <bits/signal.h>"
+style = "Tag"
 language = "C"
 
 [defines]

+ 8 - 172
src/signal/src/lib.rs

@@ -4,183 +4,17 @@
 
 extern crate platform;
 
-use platform::types::*;
-
-#[cfg(target_os = "linux")]
-#[repr(C)]
-pub struct sigset_t {
-    pub bits: [u64; 16],
-}
-
-#[cfg(target_os = "linux")]
-pub const SIGHUP: usize = 1;
-#[cfg(target_os = "linux")]
-pub const SIGINT: usize = 2;
-#[cfg(target_os = "linux")]
-pub const SIGQUIT: usize = 3;
-#[cfg(target_os = "linux")]
-pub const SIGILL: usize = 4;
-#[cfg(target_os = "linux")]
-pub const SIGTRAP: usize = 5;
-#[cfg(target_os = "linux")]
-pub const SIGABRT: usize = 6;
-#[cfg(target_os = "linux")]
-pub const SIGIOT: usize = SIGABRT;
-#[cfg(target_os = "linux")]
-pub const SIGBUS: usize = 7;
-#[cfg(target_os = "linux")]
-pub const SIGFPE: usize = 8;
-#[cfg(target_os = "linux")]
-pub const SIGKILL: usize = 9;
-#[cfg(target_os = "linux")]
-pub const SIGUSR1: usize = 10;
-#[cfg(target_os = "linux")]
-pub const SIGSEGV: usize = 11;
-#[cfg(target_os = "linux")]
-pub const SIGUSR2: usize = 12;
-#[cfg(target_os = "linux")]
-pub const SIGPIPE: usize = 13;
-#[cfg(target_os = "linux")]
-pub const SIGALRM: usize = 14;
-#[cfg(target_os = "linux")]
-pub const SIGTERM: usize = 15;
-#[cfg(target_os = "linux")]
-pub const SIGSTKFLT: usize = 16;
-#[cfg(target_os = "linux")]
-pub const SIGCHLD: usize = 17;
-#[cfg(target_os = "linux")]
-pub const SIGCONT: usize = 18;
-#[cfg(target_os = "linux")]
-pub const SIGSTOP: usize = 19;
-#[cfg(target_os = "linux")]
-pub const SIGTSTP: usize = 20;
-#[cfg(target_os = "linux")]
-pub const SIGTTIN: usize = 21;
-#[cfg(target_os = "linux")]
-pub const SIGTTOU: usize = 22;
-#[cfg(target_os = "linux")]
-pub const SIGURG: usize = 23;
-#[cfg(target_os = "linux")]
-pub const SIGXCPU: usize = 24;
-#[cfg(target_os = "linux")]
-pub const SIGXFSZ: usize = 25;
-#[cfg(target_os = "linux")]
-pub const SIGVTALRM: usize = 26;
-#[cfg(target_os = "linux")]
-pub const SIGPROF: usize = 27;
-#[cfg(target_os = "linux")]
-pub const SIGWINCH: usize = 28;
-#[cfg(target_os = "linux")]
-pub const SIGIO: usize = 29;
-#[cfg(target_os = "linux")]
-pub const SIGPOLL: usize = 29;
-#[cfg(target_os = "linux")]
-pub const SIGPWR: usize = 30;
-#[cfg(target_os = "linux")]
-pub const SIGSYS: usize = 31;
-#[cfg(target_os = "linux")]
-pub const SIGUNUSED: usize = SIGSYS;
-
-#[cfg(target_os = "linux")]
-pub const SA_NOCLDSTOP: usize = 1;
-#[cfg(target_os = "linux")]
-pub const SA_NOCLDWAIT: usize = 2;
-#[cfg(target_os = "linux")]
-pub const SA_SIGINFO: usize = 4;
-#[cfg(target_os = "linux")]
-pub const SA_ONSTACK: usize = 0x08000000;
 #[cfg(target_os = "linux")]
-pub const SA_RESTART: usize = 0x10000000;
-#[cfg(target_os = "linux")]
-pub const SA_NODEFER: usize = 0x40000000;
-#[cfg(target_os = "linux")]
-pub const SA_RESETHAND: usize = 0x80000000;
-#[cfg(target_os = "linux")]
-pub const SA_RESTORER: usize = 0x04000000;
+#[path = "linux.rs"]
+pub mod sys;
 
 #[cfg(target_os = "redox")]
-#[repr(C)]
-pub struct sigset_t {
-    pub bits: [u64; 2],
-}
+#[path = "redox.rs"]
+pub mod sys;
 
-#[cfg(target_os = "redox")]
-pub const SIGHUP: usize = 1;
-#[cfg(target_os = "redox")]
-pub const SIGINT: usize = 2;
-#[cfg(target_os = "redox")]
-pub const SIGQUIT: usize = 3;
-#[cfg(target_os = "redox")]
-pub const SIGILL: usize = 4;
-#[cfg(target_os = "redox")]
-pub const SIGTRAP: usize = 5;
-#[cfg(target_os = "redox")]
-pub const SIGBUS: usize = 7;
-#[cfg(target_os = "redox")]
-pub const SIGFPE: usize = 8;
-#[cfg(target_os = "redox")]
-pub const SIGKILL: usize = 9;
-#[cfg(target_os = "redox")]
-pub const SIGUSR1: usize = 10;
-#[cfg(target_os = "redox")]
-pub const SIGSEGV: usize = 11;
-#[cfg(target_os = "redox")]
-pub const SIGUSR2: usize = 12;
-#[cfg(target_os = "redox")]
-pub const SIGPIPE: usize = 13;
-#[cfg(target_os = "redox")]
-pub const SIGALRM: usize = 14;
-#[cfg(target_os = "redox")]
-pub const SIGTERM: usize = 15;
-#[cfg(target_os = "redox")]
-pub const SIGSTKFLT: usize = 16;
-#[cfg(target_os = "redox")]
-pub const SIGCHLD: usize = 17;
-#[cfg(target_os = "redox")]
-pub const SIGCONT: usize = 18;
-#[cfg(target_os = "redox")]
-pub const SIGSTOP: usize = 19;
-#[cfg(target_os = "redox")]
-pub const SIGTSTP: usize = 20;
-#[cfg(target_os = "redox")]
-pub const SIGTTIN: usize = 21;
-#[cfg(target_os = "redox")]
-pub const SIGTTOU: usize = 22;
-#[cfg(target_os = "redox")]
-pub const SIGURG: usize = 23;
-#[cfg(target_os = "redox")]
-pub const SIGXCPU: usize = 24;
-#[cfg(target_os = "redox")]
-pub const SIGXFSZ: usize = 25;
-#[cfg(target_os = "redox")]
-pub const SIGVTALRM: usize = 26;
-#[cfg(target_os = "redox")]
-pub const SIGPROF: usize = 27;
-#[cfg(target_os = "redox")]
-pub const SIGWINCH: usize = 28;
-#[cfg(target_os = "redox")]
-pub const SIGIO: usize = 29;
-#[cfg(target_os = "redox")]
-pub const SIGPWR: usize = 30;
-#[cfg(target_os = "redox")]
-pub const SIGSYS: usize = 31;
+pub use sys::*;
 
-#[cfg(target_os = "redox")]
-pub const SA_NOCLDSTOP: usize = 0x00000001;
-#[cfg(target_os = "redox")]
-pub const SA_NOCLDWAIT: usize = 0x00000002;
-#[cfg(target_os = "redox")]
-pub const SA_SIGINFO: usize = 0x00000004;
-#[cfg(target_os = "redox")]
-pub const SA_RESTORER: usize = 0x04000000;
-#[cfg(target_os = "redox")]
-pub const SA_ONSTACK: usize = 0x08000000;
-#[cfg(target_os = "redox")]
-pub const SA_RESTART: usize = 0x10000000;
-#[cfg(target_os = "redox")]
-pub const SA_NODEFER: usize = 0x40000000;
-#[cfg(target_os = "redox")]
-pub const SA_RESETHAND: usize = 0x80000000;
+use platform::types::*;
 
 #[repr(C)]
 pub struct sigaction {
@@ -189,6 +23,8 @@ pub struct sigaction {
     pub sa_flags: usize,
 }
 
+pub type sigset_t = sys_sigset_t;
+
 #[no_mangle]
 pub extern "C" fn kill(pid: pid_t, sig: c_int) -> c_int {
     unimplemented!();

+ 48 - 0
src/signal/src/linux.rs

@@ -0,0 +1,48 @@
+#[repr(C)]
+pub struct sys_sigset_t {
+    pub bits: [u64; 16],
+}
+
+pub const SIGHUP: usize = 1;
+pub const SIGINT: usize = 2;
+pub const SIGQUIT: usize = 3;
+pub const SIGILL: usize = 4;
+pub const SIGTRAP: usize = 5;
+pub const SIGABRT: usize = 6;
+pub const SIGIOT: usize = SIGABRT;
+pub const SIGBUS: usize = 7;
+pub const SIGFPE: usize = 8;
+pub const SIGKILL: usize = 9;
+pub const SIGUSR1: usize = 10;
+pub const SIGSEGV: usize = 11;
+pub const SIGUSR2: usize = 12;
+pub const SIGPIPE: usize = 13;
+pub const SIGALRM: usize = 14;
+pub const SIGTERM: usize = 15;
+pub const SIGSTKFLT: usize = 16;
+pub const SIGCHLD: usize = 17;
+pub const SIGCONT: usize = 18;
+pub const SIGSTOP: usize = 19;
+pub const SIGTSTP: usize = 20;
+pub const SIGTTIN: usize = 21;
+pub const SIGTTOU: usize = 22;
+pub const SIGURG: usize = 23;
+pub const SIGXCPU: usize = 24;
+pub const SIGXFSZ: usize = 25;
+pub const SIGVTALRM: usize = 26;
+pub const SIGPROF: usize = 27;
+pub const SIGWINCH: usize = 28;
+pub const SIGIO: usize = 29;
+pub const SIGPOLL: usize = 29;
+pub const SIGPWR: usize = 30;
+pub const SIGSYS: usize = 31;
+pub const SIGUNUSED: usize = SIGSYS;
+
+pub const SA_NOCLDSTOP: usize = 1;
+pub const SA_NOCLDWAIT: usize = 2;
+pub const SA_SIGINFO: usize = 4;
+pub const SA_ONSTACK: usize = 0x08000000;
+pub const SA_RESTART: usize = 0x10000000;
+pub const SA_NODEFER: usize = 0x40000000;
+pub const SA_RESETHAND: usize = 0x80000000;
+pub const SA_RESTORER: usize = 0x04000000;

+ 44 - 0
src/signal/src/redox.rs

@@ -0,0 +1,44 @@
+#[repr(C)]
+pub struct sys_sigset_t {
+    pub bits: [u64; 2],
+}
+
+pub const SIGHUP: usize = 1;
+pub const SIGINT: usize = 2;
+pub const SIGQUIT: usize = 3;
+pub const SIGILL: usize = 4;
+pub const SIGTRAP: usize = 5;
+pub const SIGBUS: usize = 7;
+pub const SIGFPE: usize = 8;
+pub const SIGKILL: usize = 9;
+pub const SIGUSR1: usize = 10;
+pub const SIGSEGV: usize = 11;
+pub const SIGUSR2: usize = 12;
+pub const SIGPIPE: usize = 13;
+pub const SIGALRM: usize = 14;
+pub const SIGTERM: usize = 15;
+pub const SIGSTKFLT: usize = 16;
+pub const SIGCHLD: usize = 17;
+pub const SIGCONT: usize = 18;
+pub const SIGSTOP: usize = 19;
+pub const SIGTSTP: usize = 20;
+pub const SIGTTIN: usize = 21;
+pub const SIGTTOU: usize = 22;
+pub const SIGURG: usize = 23;
+pub const SIGXCPU: usize = 24;
+pub const SIGXFSZ: usize = 25;
+pub const SIGVTALRM: usize = 26;
+pub const SIGPROF: usize = 27;
+pub const SIGWINCH: usize = 28;
+pub const SIGIO: usize = 29;
+pub const SIGPWR: usize = 30;
+pub const SIGSYS: usize = 31;
+
+pub const SA_NOCLDSTOP: usize = 0x00000001;
+pub const SA_NOCLDWAIT: usize = 0x00000002;
+pub const SA_SIGINFO: usize = 0x00000004;
+pub const SA_RESTORER: usize = 0x04000000;
+pub const SA_ONSTACK: usize = 0x08000000;
+pub const SA_RESTART: usize = 0x10000000;
+pub const SA_NODEFER: usize = 0x40000000;
+pub const SA_RESETHAND: usize = 0x80000000;

+ 23 - 4
src/string/src/lib.rs

@@ -250,8 +250,13 @@ pub unsafe extern "C" fn strncpy(s1: *mut c_char, s2: *const c_char, n: usize) -
 }
 
 #[no_mangle]
-pub extern "C" fn strpbrk(s1: *const c_char, s2: *const c_char) -> *mut c_char {
-    unimplemented!();
+pub unsafe extern "C" fn strpbrk(s1: *const c_char, s2: *const c_char) -> *mut c_char {
+    let p = s1.offset(strcspn(s1, s2) as isize);
+    if *p != 0 {
+        p as *mut c_char
+    } else {
+        ptr::null_mut()
+    }
 }
 
 #[no_mangle]
@@ -299,8 +304,22 @@ pub unsafe extern "C" fn strspn(s1: *const c_char, s2: *const c_char) -> c_ulong
 }
 
 #[no_mangle]
-pub extern "C" fn strstr(s1: *const c_char, s2: *const c_char) -> *mut c_char {
-    unimplemented!();
+pub unsafe extern "C" fn strstr(s1: *const c_char, s2: *const c_char) -> *mut c_char {
+    let mut i = 0;
+    while *s1.offset(i) != 0 {
+        let mut j = 0;
+        while *s2.offset(j) != 0 && *s1.offset(j + i) != 0 {
+            if *s2.offset(j) != *s1.offset(j + i) {
+                break;
+            }
+            j += 1;
+            if *s2.offset(j) == 0 {
+                return s1.offset(i) as *mut c_char;
+            }
+        }
+        i += 1;
+    }
+    ptr::null_mut()
 }
 
 #[no_mangle]

+ 1 - 0
src/wait/cbindgen.toml

@@ -1,5 +1,6 @@
 sys_includes = ["sys/types.h", "sys/resource.h"]
 include_guard = "_SYS_WAIT_H"
+style = "Tag"
 language = "C"
 
 [enum]

+ 2 - 0
tests/Makefile

@@ -31,6 +31,8 @@ EXPECT_BINS=\
 	string/strchr \
 	string/strrchr \
 	string/strspn \
+	string/strstr \
+	string/strpbrk \
 	unlink \
 	write
 

+ 0 - 0
tests/expected/string/strpbrk.stderr


+ 3 - 0
tests/expected/string/strpbrk.stdout

@@ -0,0 +1,3 @@
+The quick drawn fix jumps over the lazy bug
+lazy bug
+NULL

+ 0 - 0
tests/expected/string/strstr.stderr


+ 3 - 0
tests/expected/string/strstr.stdout

@@ -0,0 +1,3 @@
+rust
+libc we trust
+NULL

+ 20 - 0
tests/string/strpbrk.c

@@ -0,0 +1,20 @@
+#include <string.h>
+#include <stdio.h>
+
+int main(int argc, char* argv[]) {
+    char* source = "The quick drawn fix jumps over the lazy bug";
+
+    // should be "The quick drawn fix jumps over the lazy bug"
+    char* res1 = strpbrk(source, "From The Very Beginning");
+    printf("%s\n", (res1) ? res1 : "NULL"); 
+
+    // should be "lazy bug"
+    char* res2 = strpbrk(source, "lzbg");
+    printf("%s\n", (res2) ? res2 : "NULL"); 
+
+    // should be "NULL"
+    char* res3 = strpbrk(source, "404");
+    printf("%s\n", (res3) ? res3 : "NULL"); 
+
+    return 0;
+}

+ 18 - 0
tests/string/strstr.c

@@ -0,0 +1,18 @@
+#include <string.h>
+#include <stdio.h>
+
+int main(int argc, char* argv[]) {
+    // should be "rust"
+    char* res1 = strstr("In relibc we trust", "rust");
+    printf("%s\n", (res1) ? res1 : "NULL"); 
+
+    // should be "libc we trust"
+    char* res2 = strstr("In relibc we trust", "libc");
+    printf("%s\n", (res2) ? res2 : "NULL"); 
+
+    // should be "NULL"
+    char* res3 = strstr("In relibc we trust", "bugs");
+    printf("%s\n", (res3) ? res3 : "NULL"); 
+
+    return 0;
+}