summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Matthias Schaefer <philipp.matthias.schaefer@posteo.de>2016-08-18 21:47:08 +0200
committerPhilipp Matthias Schaefer <philipp.matthias.schaefer@posteo.de>2016-08-18 22:04:11 +0200
commit2def04a85681191ba859c862b62b7294b19f3e60 (patch)
tree3b108c74543971b0e4ef0588ea8fca104f9f44d5
parent08f5e9dd902b3e20b892549808d58a99c5a6d767 (diff)
downloadrust-libc-2def04a85681191ba859c862b62b7294b19f3e60.tar.gz
Add some macros from sched.h for android and linux.
I duplicated the code for android, because the member of cpu_set_t is private, thus cannot be accessed in the parent mod. I would have had to configure the name anyway based on the platform, because it differs between the platforms.
-rw-r--r--src/unix/notbsd/android/mod.rs32
-rw-r--r--src/unix/notbsd/linux/mod.rs7
2 files changed, 39 insertions, 0 deletions
diff --git a/src/unix/notbsd/android/mod.rs b/src/unix/notbsd/android/mod.rs
index 6c6d7b087a..148d531137 100644
--- a/src/unix/notbsd/android/mod.rs
+++ b/src/unix/notbsd/android/mod.rs
@@ -1,5 +1,7 @@
//! Android-specific definitions for linux-like values
+use dox::mem;
+
pub type c_char = u8;
pub type clock_t = ::c_long;
pub type time_t = ::c_long;
@@ -584,6 +586,36 @@ f! {
pub fn tcsendbreak(fd: ::c_int, duration: ::c_int) -> ::c_int {
ioctl(fd, TCSBRKP, duration as *mut ::c_void)
}
+
+ pub fn CPU_ZERO(cpuset: &mut cpu_set_t) -> () {
+ for slot in cpuset.__bits.iter_mut() {
+ *slot = 0;
+ }
+ }
+
+ pub fn CPU_SET(cpu: usize, cpuset: &mut cpu_set_t) -> () {
+ let size_in___bits = 8 * mem::size_of_val(&cpuset.__bits[0]);
+ let (idx, offset) = (cpu / size_in___bits, cpu % size_in___bits);
+ cpuset.__bits[idx] |= 1 << offset;
+ ()
+ }
+
+ pub fn CPU_CLR(cpu: usize, cpuset: &mut cpu_set_t) -> () {
+ let size_in___bits = 8 * mem::size_of_val(&cpuset.__bits[0]);
+ let (idx, offset) = (cpu / size_in___bits, cpu % size_in___bits);
+ cpuset.__bits[idx] &= !(1 << offset);
+ ()
+ }
+
+ pub fn CPU_ISSET(cpu: usize, cpuset: &cpu_set_t) -> bool {
+ let size_in___bits = 8 * mem::size_of_val(&cpuset.__bits[0]);
+ let (idx, offset) = (cpu / size_in___bits, cpu % size_in___bits);
+ 0 != (cpuset.__bits[idx] & (1 << offset))
+ }
+
+ pub fn CPU_EQUAL(set1: &cpu_set_t, set2: &cpu_set_t) -> bool {
+ set1.__bits == set2.__bits
+ }
}
extern {
diff --git a/src/unix/notbsd/linux/mod.rs b/src/unix/notbsd/linux/mod.rs
index 93bf24e253..9f25cb99d3 100644
--- a/src/unix/notbsd/linux/mod.rs
+++ b/src/unix/notbsd/linux/mod.rs
@@ -491,6 +491,13 @@ f! {
()
}
+ pub fn CPU_CLR(cpu: usize, cpuset: &mut cpu_set_t) -> () {
+ let size_in_bits = 8 * mem::size_of_val(&cpuset.bits[0]); // 32, 64 etc
+ let (idx, offset) = (cpu / size_in_bits, cpu % size_in_bits);
+ cpuset.bits[idx] &= !(1 << offset);
+ ()
+ }
+
pub fn CPU_ISSET(cpu: usize, cpuset: &cpu_set_t) -> bool {
let size_in_bits = 8 * mem::size_of_val(&cpuset.bits[0]);
let (idx, offset) = (cpu / size_in_bits, cpu % size_in_bits);