Skip to content

Commit 21ad06f

Browse files
committed
Auto merge of #2470 - joshtriplett:cpu-macros, r=Amanieu
Add missing CPU_* macros to android, and sync with Linux Linux had the full set of CPU_* macros, but Android missed a few. Add the missing ones: CPU_ALLOC_SIZE, CPU_COUNT_S, and CPU_COUNT. Sync the definitions more closely with the Linux versions, so that they're easier to keep in sync. The only differences now are the field name: bits for Linux vs __bits for Android.
2 parents 7dd7932 + 59eb759 commit 21ad06f

File tree

1 file changed

+28
-6
lines changed
  • src/unix/linux_like/android

1 file changed

+28
-6
lines changed

src/unix/linux_like/android/mod.rs

+28-6
Original file line numberDiff line numberDiff line change
@@ -2480,35 +2480,57 @@ f! {
24802480
}
24812481
}
24822482

2483+
pub fn CPU_ALLOC_SIZE(count: ::c_int) -> ::size_t {
2484+
let _dummy: cpu_set_t = ::mem::zeroed();
2485+
let size_in_bits = 8 * ::mem::size_of_val(&_dummy.__bits[0]);
2486+
((count as ::size_t + size_in_bits - 1) / 8) as ::size_t
2487+
}
2488+
24832489
pub fn CPU_ZERO(cpuset: &mut cpu_set_t) -> () {
24842490
for slot in cpuset.__bits.iter_mut() {
24852491
*slot = 0;
24862492
}
24872493
}
24882494

24892495
pub fn CPU_SET(cpu: usize, cpuset: &mut cpu_set_t) -> () {
2490-
let size_in___bits = 8 * ::mem::size_of_val(&cpuset.__bits[0]);
2491-
let (idx, offset) = (cpu / size_in___bits, cpu % size_in___bits);
2496+
let size_in_bits
2497+
= 8 * ::mem::size_of_val(&cpuset.__bits[0]); // 32, 64 etc
2498+
let (idx, offset) = (cpu / size_in_bits, cpu % size_in_bits);
24922499
cpuset.__bits[idx] |= 1 << offset;
24932500
()
24942501
}
24952502

24962503
pub fn CPU_CLR(cpu: usize, cpuset: &mut cpu_set_t) -> () {
2497-
let size_in___bits = 8 * ::mem::size_of_val(&cpuset.__bits[0]);
2498-
let (idx, offset) = (cpu / size_in___bits, cpu % size_in___bits);
2504+
let size_in_bits
2505+
= 8 * ::mem::size_of_val(&cpuset.__bits[0]); // 32, 64 etc
2506+
let (idx, offset) = (cpu / size_in_bits, cpu % size_in_bits);
24992507
cpuset.__bits[idx] &= !(1 << offset);
25002508
()
25012509
}
25022510

25032511
pub fn CPU_ISSET(cpu: usize, cpuset: &cpu_set_t) -> bool {
2504-
let size_in___bits = 8 * ::mem::size_of_val(&cpuset.__bits[0]);
2505-
let (idx, offset) = (cpu / size_in___bits, cpu % size_in___bits);
2512+
let size_in_bits = 8 * ::mem::size_of_val(&cpuset.__bits[0]);
2513+
let (idx, offset) = (cpu / size_in_bits, cpu % size_in_bits);
25062514
0 != (cpuset.__bits[idx] & (1 << offset))
25072515
}
25082516

2517+
pub fn CPU_COUNT_S(size: usize, cpuset: &cpu_set_t) -> ::c_int {
2518+
let mut s: u32 = 0;
2519+
let size_of_mask = ::mem::size_of_val(&cpuset.__bits[0]);
2520+
for i in cpuset.__bits[..(size / size_of_mask)].iter() {
2521+
s += i.count_ones();
2522+
};
2523+
s as ::c_int
2524+
}
2525+
2526+
pub fn CPU_COUNT(cpuset: &cpu_set_t) -> ::c_int {
2527+
CPU_COUNT_S(::mem::size_of::<cpu_set_t>(), cpuset)
2528+
}
2529+
25092530
pub fn CPU_EQUAL(set1: &cpu_set_t, set2: &cpu_set_t) -> bool {
25102531
set1.__bits == set2.__bits
25112532
}
2533+
25122534
pub fn major(dev: ::dev_t) -> ::c_int {
25132535
((dev >> 8) & 0xfff) as ::c_int
25142536
}

0 commit comments

Comments
 (0)