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
1 changed files with 49 additions and 34 deletions

View File

@ -40,22 +40,25 @@ 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__)
{
char *pos;
while(fgets(buffer, bsize, fp) != NULL) while(fgets(buffer, bsize, fp) != NULL)
{ {
find_match_char(buffer, "cpu", model); find_match_char(buffer, "cpu", model);
@ -63,9 +66,11 @@ int xs_parse_cpu(char *model, char *vendor, double *freq)
find_match_double(buffer, "clock", freq); find_match_double(buffer, "clock", freq);
} }
pos = strstr(model, ","); pos = strstr(model, ",");
if (pos != NULL) *pos = '\0'; if (pos != NULL)
#endif *pos = '\0';
#ifdef __alpha__ }
#elif defined( __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,27 +78,31 @@ 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; DIR *dir;
struct dirent *entry; struct dirent *entry;
FILE *fp2; FILE *fp2;
while(fgets(buffer, bsize, fp) != NULL) while(fgets(buffer, bsize, fp) != NULL)
{ {
find_match_char(buffer, "cpu ", model); find_match_char(buffer, "cpu ", model);
@ -101,9 +110,15 @@ int xs_parse_cpu(char *model, char *vendor, double *freq)
find_match_double_hex(buffer, "Cpu0ClkTck", freq); find_match_double_hex(buffer, "Cpu0ClkTck", freq);
} }
*freq = *freq / 1000000; *freq = *freq / 1000000;
#endif }
fclose(fp); #else
fclose(fp);
return 1; /* Unsupported */
#endif
fclose(fp);
return 0; return 0;
} }