sysinfo: Clean up ifdefs and handle unsupported CPU

Mentioned in #1624
This commit is contained in:
Patrick Griffis 2016-03-06 22:59:02 -05:00
parent 10fa3b1878
commit ed029357d1

View File

@ -40,32 +40,37 @@ int xs_parse_cpu(char *model, char *vendor, double *freq)
#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) || defined(__alpha__) || defined(__ia64__) || defined(__parisc__) || defined(__sparc__) #if defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) || defined(__alpha__) || defined(__ia64__) || defined(__parisc__) || defined(__sparc__)
char buffer[bsize]; char buffer[bsize];
#endif #endif
#if defined(__powerpc__) FILE *fp;
char *pos = NULL;
#endif fp = fopen("/proc/cpuinfo", "r");
FILE *fp = fopen("/proc/cpuinfo", "r");
if(fp == NULL) if(fp == NULL)
return 1; return 1;
#if defined(__i386__) || defined(__x86_64__) #if defined(__i386__) || defined(__x86_64__)
while(fgets(buffer, bsize, fp) != NULL) while(fgets(buffer, bsize, fp) != NULL)
{ {
find_match_char(buffer, "model name", model); find_match_char(buffer, "model name", model);
find_match_char(buffer, "vendor_id", vendor); find_match_char(buffer, "vendor_id", vendor);
find_match_double(buffer, "cpu MHz", freq); find_match_double(buffer, "cpu MHz", freq);
} }
#endif
#ifdef __powerpc__ #elif defined(__powerpc__)
while(fgets(buffer, bsize, fp) != NULL)
{ {
find_match_char(buffer, "cpu", model); char *pos;
find_match_char(buffer, "machine", vendor);
find_match_double(buffer, "clock", freq); while(fgets(buffer, bsize, fp) != NULL)
{
find_match_char(buffer, "cpu", model);
find_match_char(buffer, "machine", vendor);
find_match_double(buffer, "clock", freq);
}
pos = strstr(model, ",");
if (pos != NULL)
*pos = '\0';
} }
pos = strstr(model, ","); #elif defined( __alpha__)
if (pos != NULL) *pos = '\0';
#endif
#ifdef __alpha__
while(fgets(buffer, bsize, fp) != NULL) while(fgets(buffer, bsize, fp) != NULL)
{ {
find_match_char(buffer, "cpu model", model); find_match_char(buffer, "cpu model", model);
@ -73,37 +78,47 @@ int xs_parse_cpu(char *model, char *vendor, double *freq)
find_match_double(buffer, "cycle frequency [Hz]", freq); find_match_double(buffer, "cycle frequency [Hz]", freq);
} }
*freq = *freq / 1000000; *freq = *freq / 1000000;
#endif
#ifdef __ia64__ #elif defined(__ia64__)
while(fgets(buffer, bsize, fp) != NULL) while(fgets(buffer, bsize, fp) != NULL)
{ {
find_match_char(buffer, "model", model); find_match_char(buffer, "model", model);
find_match_char(buffer, "vendor", vendor); find_match_char(buffer, "vendor", vendor);
find_match_double(buffer, "cpu MHz", freq); find_match_double(buffer, "cpu MHz", freq);
} }
#endif
#ifdef __parisc__ #elif defined(__parisc__)
while(fgets(buffer, bsize, fp) != NULL) while(fgets(buffer, bsize, fp) != NULL)
{ {
find_match_char(buffer, "cpu ", model); find_match_char(buffer, "cpu ", model);
find_match_char(buffer, "cpu family", vendor); find_match_char(buffer, "cpu family", vendor);
find_match_double(buffer, "cpu MHz", freq); find_match_double(buffer, "cpu MHz", freq);
} }
#endif
#ifdef __sparc__ #elif defined(__sparc__)
DIR *dir; {
struct dirent *entry; DIR *dir;
FILE *fp2; struct dirent *entry;
while(fgets(buffer, bsize, fp) != NULL) FILE *fp2;
{
find_match_char(buffer, "cpu ", model); while(fgets(buffer, bsize, fp) != NULL)
find_match_char(buffer, "type ", vendor); {
find_match_double_hex(buffer, "Cpu0ClkTck", freq); find_match_char(buffer, "cpu ", model);
} find_match_char(buffer, "type ", vendor);
*freq = *freq / 1000000; find_match_double_hex(buffer, "Cpu0ClkTck", freq);
#endif }
*freq = *freq / 1000000;
}
#else
fclose(fp);
return 1; /* Unsupported */
#endif
fclose(fp); fclose(fp);
return 0; return 0;
} }