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__)
char buffer[bsize];
#endif
#if defined(__powerpc__)
char *pos = NULL;
#endif
FILE *fp = fopen("/proc/cpuinfo", "r");
FILE *fp;
fp = fopen("/proc/cpuinfo", "r");
if(fp == NULL)
return 1;
#if defined(__i386__) || defined(__x86_64__)
while(fgets(buffer, bsize, fp) != NULL)
{
find_match_char(buffer, "model name", model);
find_match_char(buffer, "vendor_id", vendor);
find_match_double(buffer, "cpu MHz", freq);
}
#endif
#ifdef __powerpc__
#elif defined(__powerpc__)
{
char *pos;
while(fgets(buffer, bsize, fp) != NULL)
{
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);
}
pos = strstr(model, ",");
if (pos != NULL) *pos = '\0';
#endif
#ifdef __alpha__
if (pos != NULL)
*pos = '\0';
}
#elif defined( __alpha__)
while(fgets(buffer, bsize, fp) != NULL)
{
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);
}
*freq = *freq / 1000000;
#endif
#ifdef __ia64__
#elif defined(__ia64__)
while(fgets(buffer, bsize, fp) != NULL)
{
find_match_char(buffer, "model", model);
find_match_char(buffer, "vendor", vendor);
find_match_double(buffer, "cpu MHz", freq);
}
#endif
#ifdef __parisc__
#elif defined(__parisc__)
while(fgets(buffer, bsize, fp) != NULL)
{
find_match_char(buffer, "cpu ", model);
find_match_char(buffer, "cpu family", vendor);
find_match_double(buffer, "cpu MHz", freq);
}
#endif
#ifdef __sparc__
#elif defined(__sparc__)
{
DIR *dir;
struct dirent *entry;
FILE *fp2;
while(fgets(buffer, bsize, fp) != NULL)
{
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);
}
*freq = *freq / 1000000;
#endif
fclose(fp);
}
#else
fclose(fp);
return 1; /* Unsupported */
#endif
fclose(fp);
return 0;
}