From eb6f986361713d6ce47c6d4572bb24d9f6207ddf Mon Sep 17 00:00:00 2001 From: Anser Date: Tue, 11 Aug 2026 00:18:57 +0200 Subject: TOBESQUISHED: safe in reconstruction of the codes layout and rework of information handeling also ascii art printing --- src/utils.c | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 src/utils.c (limited to 'src/utils.c') diff --git a/src/utils.c b/src/utils.c new file mode 100644 index 0000000..5fba4dc --- /dev/null +++ b/src/utils.c @@ -0,0 +1,111 @@ +#include "../include/cfetch.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; +} + +// input two char pointer +// output: one char pointer +// misc: caller needs to free the memory +char *concat(const char *s1, const char *s2) { + const size_t len1 = strlen(s1); + const size_t len2 = strlen(s2); + char *result = malloc(len1 + len2 + 1); // +1 for '\0' + + if (result == NULL) { + perror("allocating memory for strings failed"); + return NULL; + } + + memcpy(result, s1, len1); + memcpy(result + len1, s2, len2 + 1); // +1 for null-terminator + return result; //caller needs to free memory +} -- cgit v1.2.3