aboutsummaryrefslogtreecommitdiff
path: root/src/common/tuklib_cpucores.c
diff options
context:
space:
mode:
authorLasse Collin <lasse.collin@tukaani.org>2010-05-10 19:54:15 +0300
committerLasse Collin <lasse.collin@tukaani.org>2010-05-10 19:54:15 +0300
commit6548e304657e77d3a972053db3c41c5daf591113 (patch)
treec8ae4f8c278d244d9d4f17084b7095beea9ea9dc /src/common/tuklib_cpucores.c
parentShow both elapsed time and estimated remaining time in xz -v. (diff)
downloadxz-6548e304657e77d3a972053db3c41c5daf591113.tar.xz
Updates to tuklib_physmem and tuklib_cpucores.
Don't use #error to generate compile error, because some compilers actually don't take it as an error. This fixes tuklib_physmem on IRIX. Fix incorrect error check for sysconf() return values. Add AIX, HP-UX, and Tru64 specific code to detect the amount RAM. Add HP-UX specific code to detect the number of CPU cores. Thanks a lot to Peter O'Gorman for initial patches, testing, and debugging these fixes.
Diffstat (limited to 'src/common/tuklib_cpucores.c')
-rw-r--r--src/common/tuklib_cpucores.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/common/tuklib_cpucores.c b/src/common/tuklib_cpucores.c
index e35d9bc7..1da13df7 100644
--- a/src/common/tuklib_cpucores.c
+++ b/src/common/tuklib_cpucores.c
@@ -20,6 +20,11 @@
#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
@@ -34,7 +39,7 @@ tuklib_cpucores(void)
size_t cpus_size = sizeof(cpus);
if (sysctl(name, 2, &cpus, &cpus_size, NULL, 0) != -1
&& cpus_size == sizeof(cpus) && cpus > 0)
- ret = (uint32_t)cpus;
+ ret = cpus;
#elif defined(TUKLIB_CPUCORES_SYSCONF)
# ifdef _SC_NPROCESSORS_ONLN
@@ -45,7 +50,12 @@ tuklib_cpucores(void)
const long cpus = sysconf(_SC_NPROC_ONLN);
# endif
if (cpus > 0)
- ret = (uint32_t)cpus;
+ 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;