Index: xz/src/common/tuklib_cpucores.c |
=================================================================== |
--- xz/src/common/tuklib_cpucores.c (revision 0) |
+++ xz/src/common/tuklib_cpucores.c (revision 0) |
@@ -0,0 +1,62 @@ |
+/////////////////////////////////////////////////////////////////////////////// |
+// |
+/// \file tuklib_cpucores.c |
+/// \brief Get the number of CPU cores online |
+// |
+// Author: Lasse Collin |
+// |
+// This file has been put into the public domain. |
+// You can do whatever you want with this file. |
+// |
+/////////////////////////////////////////////////////////////////////////////// |
+ |
+#include "tuklib_cpucores.h" |
+ |
+#if defined(TUKLIB_CPUCORES_SYSCTL) |
+# ifdef HAVE_SYS_PARAM_H |
+# include <sys/param.h> |
+# endif |
+# include <sys/sysctl.h> |
+ |
+#elif defined(TUKLIB_CPUCORES_SYSCONF) |
+# include <unistd.h> |
+ |
+// HP-UX |
+#elif defined(TUKLIB_CPUCORES_PSTAT_GETDYNAMIC) |
+# include <sys/param.h> |
+# include <sys/pstat.h> |
+#endif |
+ |
+ |
+extern uint32_t |
+tuklib_cpucores(void) |
+{ |
+ uint32_t ret = 0; |
+ |
+#if defined(TUKLIB_CPUCORES_SYSCTL) |
+ int name[2] = { CTL_HW, HW_NCPU }; |
+ int cpus; |
+ size_t cpus_size = sizeof(cpus); |
+ if (sysctl(name, 2, &cpus, &cpus_size, NULL, 0) != -1 |
+ && cpus_size == sizeof(cpus) && cpus > 0) |
+ ret = cpus; |
+ |
+#elif defined(TUKLIB_CPUCORES_SYSCONF) |
+# ifdef _SC_NPROCESSORS_ONLN |
+ // Most systems |
+ const long cpus = sysconf(_SC_NPROCESSORS_ONLN); |
+# else |
+ // IRIX |
+ const long cpus = sysconf(_SC_NPROC_ONLN); |
+# endif |
+ if (cpus > 0) |
+ ret = cpus; |
+ |
+#elif defined(TUKLIB_CPUCORES_PSTAT_GETDYNAMIC) |
+ struct pst_dynamic pst; |
+ if (pstat_getdynamic(&pst, sizeof(pst), 1, 0) != -1) |
+ ret = pst.psd_proc_cnt; |
+#endif |
+ |
+ return ret; |
+} |
Property changes on: xz/src/common/tuklib_cpucores.c |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |