Attached is an updated patch to deal with sparc machines (tested on my Sun U30).
HTH
T-Bone
--
Thibaut VARENE
http://www.parisc-linux.org/~varenet/
--- boinc-5.4.11.orig/client/hostinfo_unix.C 2006-03-02 08:17:17.000000000 +0100
+++ boinc-5.4.11/client/hostinfo_unix.C 2007-02-03 01:32:36.491942808 +0100
@@ -323,7 +323,168 @@
fclose(f);
}
-#else // not mips or alpha
+#elif __ia64__
+
+void parse_cpuinfo(HOST_INFO& host) {
+ char buf[256];
+ int system_found=0,model_found=0;
+ int n;
+ host.m_cache = 0;
+
+ FILE* f = fopen("/proc/cpuinfo", "r");
+ if (!f) return;
+
+ while (fgets(buf, 256, f)) {
+ if ( (strstr(buf, "vendor : ") == buf) &&
+ (system_found == 0) ) {
+ system_found = 1;
+ strncpy(host.p_vendor, strchr(buf, ':') + 2, sizeof(host.p_vendor) - 1);
+ char * p = strchr(host.p_vendor, '\n');
+ if (p) {
+ *p = '\0';
+ }
+ }
+ if ( (strstr(buf, "family : ") == buf) &&
+ (model_found == 0) ) {
+ model_found = 1;
+ strncpy(host.p_model, strchr(buf, ':') + 2, sizeof(host.p_model) - 1);
+ char * p = strchr(host.p_model, '\n');
+ if (p) {
+ *p = '\0';
+ }
+ }
+ }
+
+ fclose(f);
+}
+
+#elif __hppa__
+
+void parse_cpuinfo(HOST_INFO& host) {
+ char buf[256];
+ int system_found=0,model_found=0,icache_found=0,dcache_found=0;
+ int n;
+ host.m_cache = 0;
+
+ FILE* f = fopen("/proc/cpuinfo", "r");
+ if (!f) return;
+
+ while (fgets(buf, 256, f)) {
+ if ( (strstr(buf, "cpu\t\t: ") == buf) &&
+ (system_found == 0) ) {
+ system_found = 1;
+ strncpy(host.p_vendor, strchr(buf, ':') + 2, sizeof(host.p_vendor) - 1);
+ char * p = strchr(host.p_vendor, '\n');
+ if (p) {
+ *p = '\0';
+ }
+ }
+ if ( (strstr(buf, "model name\t: ") == buf) &&
+ (model_found == 0) ) {
+ model_found = 1;
+ strncpy(host.p_model, strchr(buf, ':') + 2, sizeof(host.p_model) - 1);
+ char * p = strchr(host.p_model, '\n');
+ if (p) {
+ *p = '\0';
+ }
+ }
+ if ( (strstr(buf, "I-cache\t\t: ") == buf) &&
+ (icache_found == 0) ) {
+ icache_found = 1;
+ sscanf(buf, "I-cache\t\t: %d", &n);
+ host.m_cache += n*1024;
+ }
+ if ( (strstr(buf, "D-cache\t\t: ") == buf) &&
+ (dcache_found == 0) ) {
+ dcache_found = 1;
+ sscanf(buf, "D-cache\t\t: %d", &n);
+ host.m_cache += n*1024;
+ }
+ }
+
+ fclose(f);
+}
+
+#elif __powerpc__
+
+void parse_cpuinfo(HOST_INFO& host) {
+ char buf[256];
+ int system_found=0,model_found=0,cache_found=0;
+ int n;
+ char* coma=NULL;
+ host.m_cache=0;
+
+ FILE* f = fopen("/proc/cpuinfo", "r");
+ if (!f) return;
+
+ while (fgets(buf, 256, f)) {
+ if ( (strstr(buf, "machine\t\t: ") == buf) &&
+ (system_found == 0) ) {
+ system_found = 1;
+ strncpy(host.p_vendor, strchr(buf, ':') + 2, sizeof(host.p_vendor) - 1);
+ char * p = strchr(host.p_vendor, '\n');
+ if (p) {
+ *p = '\0';
+ }
+ }
+ if ( (strstr(buf, "cpu\t\t: ") == buf) &&
+ (model_found == 0) ) {
+ model_found = 1;
+ if ((coma = strrchr(buf, ',')))
+ *coma = '\0'; /* we don't want the ", altivec supported" */
+ strncpy(host.p_model, strchr(buf, ':') + 2, sizeof(host.p_model) - 1);
+ char * p = strchr(host.p_model, '\n');
+ if (p) {
+ *p = '\0';
+ }
+ }
+ if ( (strstr(buf, "L2-cache\t: ") == buf) &&
+ (cache_found == 0) ) {
+ cache_found = 1;
+ sscanf(buf, "L2-cache\t: %d", &n);
+ host.m_cache = n*1024;
+ }
+ }
+
+ fclose(f);
+}
+
+#elif __sparc__
+
+void parse_cpuinfo(HOST_INFO& host) {
+ char buf[256];
+ int system_found=0,model_found=0;
+ int n;
+ host.m_cache=0;
+
+ FILE* f = fopen("/proc/cpuinfo", "r");
+ if (!f) return;
+
+ while (fgets(buf, 256, f)) {
+ if ( (strstr(buf, "type\t\t: ") == buf) &&
+ (system_found == 0) ) {
+ system_found = 1;
+ strncpy(host.p_vendor, strchr(buf, ':') + 2, sizeof(host.p_vendor) - 1);
+ char * p = strchr(host.p_vendor, '\n');
+ if (p) {
+ *p = '\0';
+ }
+ }
+ if ( (strstr(buf, "cpu\t\t: ") == buf) &&
+ (model_found == 0) ) {
+ model_found = 1;
+ strncpy(host.p_model, strchr(buf, ':') + 2, sizeof(host.p_model) - 1);
+ char * p = strchr(host.p_model, '\n');
+ if (p) {
+ *p = '\0';
+ }
+ }
+ }
+
+ fclose(f);
+}
+
+#else // not mips or alpha or ia64 or hppa or powerpc or sparc
// Unfortunately the format of /proc/cpuinfo is not standardized.
// See http://people.nl.linux.org/~hch/cpuinfo/ for some examples.