summaryrefslogtreecommitdiff
path: root/hardware.c
diff options
context:
space:
mode:
Diffstat (limited to 'hardware.c')
-rw-r--r--hardware.c109
1 files changed, 22 insertions, 87 deletions
diff --git a/hardware.c b/hardware.c
index 06b0096..46ecfc8 100644
--- a/hardware.c
+++ b/hardware.c
@@ -2,6 +2,8 @@
#include <string.h>
#include <stdlib.h>
+#include <proccpuinfo.h>
+
#define BUF_SIZ 1024
/******************
@@ -47,94 +49,27 @@ static void runCommand (const char *command, char *result) {
** The pointers must point to pre-allocated arrays of at least BUF_SIZ
*/
static void readProcCpuInfo (char *model, char *cache) {
- FILE * info;
- char * cp;
- int cpus = 0;
- char * buffer_end;
- char buffer[BUF_SIZ];
- char vendor_id[BUF_SIZ];
- char model_name[BUF_SIZ];
- char cpu_MHz[BUF_SIZ];
- int i;
- float f;
+ char format[32];
+ proccpuinfo *info = proccpuinfo_read();
- vendor_id[0] = model_name[0] = cpu_MHz[0] = model[0] = cache[0] = '\0';
- info = fopen("/proc/cpuinfo", "r");
- if(info != NULL) {
- /* command did not fail */
- while(NULL != fgets(buffer, BUF_SIZ, info)){
- buffer_end = buffer + strlen(buffer);
- cp = buffer;
- if(! strncmp(buffer, "processor", 9)) {
- cpus++;
- } else if(! strncmp(buffer, "vendor_id", 9)) {
- cp+=strlen("vendor_id");
- while(cp < buffer_end && ( *cp == ' ' || *cp == ':'|| *cp == '\t'))
- cp++;
- if(cp<buffer_end) {
- strcpy(vendor_id, cp);
- }
- removeNewLine(vendor_id);
- } else if(! strncmp(buffer, "model name", 10)) {
- cp+=strlen("model name");
- while(cp < buffer_end && ( *cp == ' ' || *cp == ':'|| *cp == '\t'))
- cp++;
- if(cp<buffer_end) {
- strcpy(model_name, cp);
- }
- removeNewLine(model_name);
- } else if(! strncmp(buffer, "cpu MHz", 7)) {
- cp+=strlen("cpu MHz");
- while(cp < buffer_end && ( *cp == ' ' || *cp == ':'|| *cp == '\t'))
- cp++;
- if(cp<buffer_end) {
- strcpy(cpu_MHz, cp);
- }
- removeNewLine(cpu_MHz);
- } else if(! strncmp(buffer, "cache size", 10)) {
- cp+=strlen("cache size");
- while(cp < buffer_end && ( *cp == ' ' || *cp == ':'|| *cp == '\t'))
- cp++;
- if(cp<buffer_end) {
- strcpy(cache, cp);
- }
- removeNewLine(cache);
- }
- }
- if(cpus>1) {
- if (cpus==2) {
- strcpy(model, "Dual");
- } else {
- sprintf(model, "%d CPU", cpus);
- }
- }
- cp = model + strlen(model);
- if(vendor_id[0] != '\0'){
- if(cp != model){
- *cp++ = ' ';
- }
- strcpy(cp, vendor_id);
- cp += strlen(vendor_id);
- }
- if(model_name[0] != '\0'){
- if(cp != model){
- *cp++ = ' ';
- }
- strcpy(cp, model_name);
- cp += strlen(model_name);
- }
- if(cpu_MHz[0] != '\0'){
- if(cp != model){
- *cp++ = ' ';
- }
- f = atof(cpu_MHz);
- i = (int)(f+0.5f);
- sprintf(cpu_MHz, "%dMHz", i);
- strcpy(cp, cpu_MHz);
- cp += strlen(cpu_MHz);
- }
- fclose(info);
- }
+ if (!info) {
+ return;
+ }
+
+ switch (info->cpus) {
+ case 1:
+ strncpy(format, "%s %s %.0fMHz", 32);
+ break;
+ case 2:
+ strncpy(format, "Dual %s %s %.0fMHz", 32);
+ break;
+ default:
+ strncpy(format, "%d CPUs %s %s %.0fMHz", 32);
+ break;
+ }
+ snprintf(model, BUF_SIZ, format, info->hardware_platform, info->architecture, info->frequency);
+ snprintf(cache, BUF_SIZ, "%d KB", info->cache);
+ proccpuinfo_free(info);
}