aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnser <rostgans@tutamail.com>2026-07-23 01:06:38 +0200
committerAnser <rostgans@tutamail.com>2026-07-31 11:12:37 +0200
commit4d4d1ff11c26ac277d8015f4a4e55dbc6da3b25c (patch)
tree91a084ca6b0d099bf6a3618fbb03befebfae2819
parent8e51ac4a4dab37b6736bd0613d41eb05f68e7c0e (diff)
finished cpu string_format
-rw-r--r--src/modules/cpu/cpu.c108
1 files changed, 106 insertions, 2 deletions
diff --git a/src/modules/cpu/cpu.c b/src/modules/cpu/cpu.c
index c2d50f3..b02a68f 100644
--- a/src/modules/cpu/cpu.c
+++ b/src/modules/cpu/cpu.c
@@ -1,7 +1,101 @@
#include <stdio.h>
#include <string.h>
+#include <stdlib.h>
#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");
@@ -24,9 +118,19 @@ int cpu(void) {
}
}
-
if (model_name != NULL) {
- printf("CPU: %s\n", model_name);
+ 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");
}