about summary refs log tree commit diff
path: root/src/libtest
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2015-12-22 07:23:16 +0000
committerbors <bors@rust-lang.org>2015-12-22 07:23:16 +0000
commit5178449f1c40b8b3a69f71e4db4e745c87b2ba67 (patch)
tree00905b79d27d878a6271b0647925a7c8becc1d05 /src/libtest
parent439e1843b9f53a2ad9e83861f47f95227737e998 (diff)
parent2f42ac438ef4bc2773f5ac0a55ae45b08e575b17 (diff)
downloadrust-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.rs41
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
     }
 }