#include #include #include #include "cpu.h" /* function: char *string_format(char* string) * input: pointer to a null-terminated string (must not be NULL) * return: pointer to a newly allocated string containing all space-separated words, * joined by single spaces; leading/trailing/multiple spaces are ignored. * on-error: returns NULL if memory allocation fails * misc: the returned pointer must be freed by the caller using free() * limits: processes at most 10 words, each up to 49 characters (last '\0') */ char *string_format(char* string) { // Wörterbuch array [Wort][Zeichenkette] char woerter[10][50] = { 0 }; int wort_index = 0; int char_index = 0; while (*string != '\0') { // add '\0' stringterminator to end of word if (*string == ' ' && char_index > 0) { // safty check for array length if (wort_index > 9 || char_index > 49) { break; } // next slot is char // add '\0' to end string woerter[wort_index][char_index] = '\0'; wort_index++; char_index = 0; string++; continue; } // skip extra spaces else if (*string == ' ' && char_index == 0) { string++; continue; } // safty check for array length if (char_index >= 49) { break; } woerter[wort_index][char_index] = *string; char_index++; string++; } // terminate last word with '\0' if (char_index > 0 && wort_index < 10 && char_index < 49) { woerter[wort_index][char_index] = '\0'; wort_index++; } /* * return */ char *ptr = NULL; // get length of woerter array if (wort_index == 0) { ptr = NULL; } else { int sum = 0; for (int i = 0; i < wort_index; i++) { sum += strlen(woerter[i]); } sum += wort_index - 1; // for spaces sum += 1; // for Nulltermination ptr = (char *)malloc(sum); // check for NULL pointer if (ptr == NULL) { return NULL; } //strcpy char *ende = ptr; for (int i = 0; i < wort_index; i++) { ende = stpcpy(ende, woerter[i]); if (i != wort_index - 1) { *(ende++) = ' '; } } } return ptr; } int cpu(void) { FILE* file = fopen("/proc/cpuinfo", "r"); //check file existence if (!file) { perror("/proc/cpuinfo not found"); return 1; } char line[256]; char *model_name = NULL; //read per line while (fgets(line, sizeof(line), file)) { char* p = strstr(line, "model name"); if (p != NULL) { model_name = strchr(p, ':') + 1; //skip : break; } } if (model_name != NULL) { char *string = string_format(model_name); if (string == NULL) { printf("CPU: Error string not found.\n"); free(string); model_name = NULL; } else { printf("CPU: %s\n", string); free(string); model_name = NULL; } } else { printf("CPU: Error model_name not found.\n"); } fclose(file); return 0; }