#include "feierabend.h"
#define MAX_STRING_LENGTH 36
+#define CHUCK_SIZE 32
memFile* init_memFile() {
memFile* mem = malloc(sizeof(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)
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);
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");
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);