From ca4fefc7a2feccd7a917ce99af8834efa457767e Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Tue, 10 Feb 2026 20:31:25 +0100 Subject: [PATCH] fix read chunks from stdin --- src/xml.c | 35 ++++++++++++++++++----------------- src/xml.h | 4 ++-- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/xml.c b/src/xml.c index 693cc42..763f71b 100644 --- a/src/xml.c +++ b/src/xml.c @@ -14,6 +14,7 @@ #include "feierabend.h" #define MAX_STRING_LENGTH 36 +#define CHUCK_SIZE 32 memFile* init_memFile() { memFile* mem = malloc(sizeof(memFile)); @@ -21,42 +22,39 @@ memFile* init_memFile() { if (mem == NULL) return NULL; - mem->data = malloc(sizeof(char*)); - mem->size = malloc(sizeof(size_t)); + mem->data = NULL; + mem->size = 0; return mem; } void free_memFile(memFile* mem) { - free(*mem->data); free(mem->data); - free(mem->size); mem->data = NULL; - mem->size = NULL; } void allocChunk(memFile* mem) { - *mem->size = 32; - char* tmpmem = realloc(mem->data, sizeof(mem->data) + (sizeof(char) * *mem->size)); + mem->size += CHUCK_SIZE; + char* tmpmem = realloc(mem->data, sizeof(char) * mem->size); if (tmpmem == NULL) { free(mem); return; } - *mem->data = tmpmem; + mem->data = tmpmem; } void shrinkMem(size_t readed, memFile* mem) { - char* tmpmem = realloc(mem->data, sizeof(mem->data) + (sizeof(char) * readed + 1)); + mem->size = readed; + char* tmpmem = realloc(mem->data, sizeof(char) * mem->size); if (tmpmem == NULL) { free(mem); return; } - tmpmem[readed + 1] = '\0'; - *mem->data = tmpmem; + mem->data = tmpmem; } void readStdInIntoMemory(memFile* mem) @@ -65,15 +63,18 @@ void readStdInIntoMemory(memFile* mem) if (buf == NULL) return; - + allocChunk(mem); size_t read_size = 0; + size_t current_chunk = CHUCK_SIZE; while(fread(buf, sizeof(char), 1, stdin) != 0) { - mem->data[read_size] = buf; - mem->size--; + mem->data[read_size] = *buf; read_size++; - if (mem->size == 0) + current_chunk--; + if (current_chunk == 0) { allocChunk(mem); + current_chunk = CHUCK_SIZE; + } } shrinkMem(read_size, mem); @@ -358,7 +359,7 @@ void createEntry(int begin_hour, void readLastSaldo(memFile* mem, char* value) { xmlInitParser(); - xmlDocPtr xmldoc = xmlReadMemory(*mem->data, *mem->size, NULL, "UTF-8", 0); + xmlDocPtr xmldoc = xmlReadMemory(mem->data, mem->size, NULL, "UTF-8", 0); if (xmldoc == NULL) { printf("ERROR: could not open memstream\n"); @@ -446,7 +447,7 @@ void addEntry(const char* date, free(xmlElemContent); xmlElemContent = NULL; - xmlTextReaderPtr xmlreader = xmlReaderForMemory(*fileContent->data, *fileContent->size, NULL, "UTF-8", 0); + xmlTextReaderPtr xmlreader = xmlReaderForMemory(fileContent->data, fileContent->size, NULL, "UTF-8", 0); xmlNodePtr xmlnode = NULL; xmlTextWriterStartDocument(xmlwriter, "1.0", "UTF-8", NULL); diff --git a/src/xml.h b/src/xml.h index ea0d37d..e3a223a 100644 --- a/src/xml.h +++ b/src/xml.h @@ -2,8 +2,8 @@ #define XML_H typedef struct { - char** data; - size_t* size; + char* data; + size_t size; } memFile; void initTimeAcount(); -- 2.47.3