]> git.sesse.net Git - vlc/commitdiff
vlc_GetCPUCount: add Solaris detection
authorFrancois Cartegnie <fcvlcdev@free.fr>
Mon, 14 Jun 2010 16:36:52 +0000 (18:36 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Tue, 15 Jun 2010 01:19:40 +0000 (04:19 +0300)
Signed-off-by: Rémi Denis-Courmont <remi@remlab.net>
src/misc/cpu.c

index 83b95603b9982c4ce4b995f1e4d6a0c2e2c05e33..71aed9dc16187a0e401e7bef1c73bdb039975ffe 100644 (file)
 #include <sys/sysctl.h>
 #endif
 
+#if defined(__SunOS)
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/processor.h>
+#include <sys/pset.h>
+#endif
+
 #if defined( __i386__ ) || defined( __x86_64__ ) || defined( __powerpc__ ) \
  || defined( __ppc__ ) || defined( __ppc64__ ) || defined( __powerpc64__ )
 # ifndef WIN32
@@ -351,6 +358,26 @@ unsigned vlc_GetCPUCount(void)
     if (sysctlbyname("hw.ncpu", &count, &size, NULL, 0))
         return 1; /* Failure */
     return count;
+#elif defined(__SunOS)
+    unsigned count = 0;
+    int type;
+    u_int numcpus;
+    processorid_t *cpulist;
+    processor_info_t cpuinfo;
+    cpulist = malloc(sizeof(processorid_t) * sysconf(_SC_NPROCESSORS_MAX));
+    if (!cpulist) return 1;
+    if (pset_info(PS_MYID, &type, &numcpus, cpulist)==0)
+    {
+        for (u_int i = 0; i < numcpus; i++)
+        {
+            if (!processor_info(cpulist[i], &cpuinfo))
+                count += (cpuinfo.pi_state == P_ONLINE)?1:0;
+        }
+    } else {
+        count = sysconf(_SC_NPROCESSORS_ONLN);
+    }
+    free(cpulist);
+    return (count>0)?count:1;
 #else
 #   warning "vlc_GetCPUCount is not implemented for your platform"
     return 1;