diff options
| author | bors <bors@rust-lang.org> | 2015-12-22 07:23:16 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-12-22 07:23:16 +0000 |
| commit | 5178449f1c40b8b3a69f71e4db4e745c87b2ba67 (patch) | |
| tree | 00905b79d27d878a6271b0647925a7c8becc1d05 /src/libtest | |
| parent | 439e1843b9f53a2ad9e83861f47f95227737e998 (diff) | |
| parent | 2f42ac438ef4bc2773f5ac0a55ae45b08e575b17 (diff) | |
| download | rust-5178449f1c40b8b3a69f71e4db4e745c87b2ba67.tar.gz rust-5178449f1c40b8b3a69f71e4db4e745c87b2ba67.zip | |
Auto merge of #30175 - alexcrichton:less-c-code, r=brson
All these definitions can now be written in Rust, so do so!
Diffstat (limited to 'src/libtest')
| -rw-r--r-- | src/libtest/lib.rs | 41 |
1 files changed, 38 insertions, 3 deletions
diff --git a/src/libtest/lib.rs b/src/libtest/lib.rs index 20d7c66cf12..a844bdf1351 100644 --- a/src/libtest/lib.rs +++ b/src/libtest/lib.rs @@ -906,10 +906,45 @@ fn get_concurrency() -> usize { } } - #[cfg(unix)] + #[cfg(any(target_os = "linux", + target_os = "macos", + target_os = "ios", + target_os = "android"))] fn num_cpus() -> usize { - extern { fn rust_get_num_cpus() -> libc::uintptr_t; } - unsafe { rust_get_num_cpus() as usize } + unsafe { + libc::sysconf(libc::_SC_NPROCESSORS_ONLN) as usize + } + } + + #[cfg(any(target_os = "freebsd", + target_os = "dragonfly", + target_os = "bitrig", + target_os = "openbsd", + target_os = "netbsd"))] + fn num_cpus() -> usize { + let mut cpus: libc::c_uint = 0; + let mut CPUS_SIZE = std::mem::size_of_val(&cpus); + let mut mib = [libc::CTL_HW, libc::HW_AVAILCPU, 0, 0]; + + unsafe { + libc::sysctl(mib.as_mut_ptr(), 2, + &mut cpus as *mut _ as *mut _, + &mut CPUS_SIZE as *mut _ as *mut _, + 0 as *mut _, 0); + } + if cpus < 1 { + mib[1] = HW_NCPU; + unsafe { + libc::sysctl(mib.as_mut_ptr(), 2, + &mut cpus as *mut _ as *mut _, + &mut CPUS_SIZE as *mut _ as *mut _, + 0 as *mut _, 0); + } + if cpus < 1 { + cpus = 1; + } + } + cpus as usize } } |
