]> gitweb.hhaalo.de Git - feierabend.git/commitdiff
fix read chunks from stdin
authorBastian Dehn <hhaalo@arcor.de>
Tue, 10 Feb 2026 19:31:25 +0000 (20:31 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Tue, 10 Feb 2026 19:32:26 +0000 (20:32 +0100)
src/xml.c
src/xml.h

index 693cc42e43003580ec50677d500910ce01674a2a..763f71bbfdc10795a4d40e01c0f5e8dcf9e0e401 100644 (file)
--- 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);
index ea0d37dfd401609f933c26455461672de48e162e..e3a223ae31c3c277c56cedf827dcac78b31e5eb2 100644 (file)
--- 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();