From: Bastian Dehn Date: Sat, 14 Feb 2026 11:29:26 +0000 (+0100) Subject: change order func and private first X-Git-Tag: 1.3.12^2~9 X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=f0820dd442a3b6c3939d23cee5b37867610b7bd3;p=feierabend.git change order func and private first --- diff --git a/src/time_format.c b/src/time_format.c index eb5819b..c7cb4f4 100644 --- a/src/time_format.c +++ b/src/time_format.c @@ -122,25 +122,6 @@ char* get_time_str_from_tm(struct tm time) return timestr; } -uint16_t get_year_from_str(const char* date) -{ - uint16_t value = 0; - char* str = malloc(sizeof(char) * 11); - - if (str == NULL) - return 0; - - strncpy(str, date, 11); - char* str_first_pos = str; - - str = strtok(str, "-"); - value = atoi(str); - - free(str_first_pos); - str_first_pos = NULL; - return value; -} - time_t get_seconds_from_str(const char* timestr) { char* str = malloc(sizeof(char) * 7); @@ -171,6 +152,25 @@ time_t get_seconds_from_str(const char* timestr) return seconds; } +uint16_t get_year_from_str(const char* date) +{ + uint16_t value = 0; + char* str = malloc(sizeof(char) * 11); + + if (str == NULL) + return 0; + + strncpy(str, date, 11); + char* str_first_pos = str; + + str = strtok(str, "-"); + value = atoi(str); + + free(str_first_pos); + str_first_pos = NULL; + return value; +} + uint8_t get_month_from_str(const char* date) { uint8_t value = 0; diff --git a/src/validate.c b/src/validate.c index 5120791..0c4e30a 100644 --- a/src/validate.c +++ b/src/validate.c @@ -6,7 +6,7 @@ #define HOUR_REGEX "^([0-9]|1[0-9]|2[0-3])$" #define MINUTE_REGEX "^([0-9]|[1-5][0-9])$" -bool validate_string(const char* str, const char* regex_pattern) +bool _validate_string(const char* str, const char* regex_pattern) { regex_t regex; @@ -22,15 +22,15 @@ bool validate_string(const char* str, const char* regex_pattern) bool validate_datestring(const char* date) { - return validate_string(date, DATE_REGEX); + return _validate_string(date, DATE_REGEX); } bool validate_hourstring(const char* hour) { - return validate_string(hour, HOUR_REGEX); + return _validate_string(hour, HOUR_REGEX); } bool validate_minutestring(const char* minutes) { - return validate_string(minutes, MINUTE_REGEX); + return _validate_string(minutes, MINUTE_REGEX); } \ No newline at end of file diff --git a/src/xml.c b/src/xml.c index 66e5063..28b1145 100644 --- a/src/xml.c +++ b/src/xml.c @@ -14,7 +14,7 @@ #define MAX_STRING_LENGTH 36 #define CHUCK_SIZE 32 -memFile* init_memFile() { +memFile* _init_memFile() { memFile* mem = malloc(sizeof(memFile)); if (mem == NULL) @@ -31,7 +31,7 @@ void free_memFile(memFile* mem) { mem->data = NULL; } -void alloc_chunk(memFile* mem) +void _alloc_chunk(memFile* mem) { mem->size += CHUCK_SIZE; char* tmpmem = realloc(mem->data, sizeof(char) * mem->size); @@ -44,7 +44,7 @@ void alloc_chunk(memFile* mem) mem->data = tmpmem; } -void shrink_mem(size_t readed, memFile* mem) +void _shrink_mem(size_t readed, memFile* mem) { mem->size = readed; char* tmpmem = realloc(mem->data, sizeof(char) * mem->size); @@ -57,14 +57,14 @@ void shrink_mem(size_t readed, memFile* mem) mem->data = tmpmem; } -void read_stdin_into_memory(memFile* mem) +void _read_stdin_into_memory(memFile* mem) { char* buf = malloc(sizeof(char)); if (buf == NULL) return; - alloc_chunk(mem); + _alloc_chunk(mem); size_t read_size = 0; uint8_t current_chunk = CHUCK_SIZE; while(fread(buf, sizeof(char), 1, stdin) != 0) { @@ -72,65 +72,101 @@ void read_stdin_into_memory(memFile* mem) read_size++; current_chunk--; if (current_chunk == 0) { - alloc_chunk(mem); + _alloc_chunk(mem); current_chunk = CHUCK_SIZE; } } - shrink_mem(read_size, mem); + _shrink_mem(read_size, mem); free(buf); buf = NULL; } -void init_time_acount() +char* _read_last_saldo(memFile* mem) { - xmlChar* xmlElemName = NULL; - xmlChar* xmlElemContent = NULL; + char* saldostr = malloc(sizeof(char) * MAX_STRING_LENGTH); + if (saldostr == NULL) + return NULL; - xmlCharEncodingHandlerPtr encodingHandler = xmlGetCharEncodingHandler(XML_CHAR_ENCODING_UTF8); - xmlOutputBufferPtr xmloutbuffer = xmlOutputBufferCreateFd(1, encodingHandler); - xmlTextWriterPtr xmlWriter = xmlNewTextWriter(xmloutbuffer); - xmlTextWriterSetIndent(xmlWriter, 8); - xmlElemContent = xmlCharStrdup("\t"); - xmlTextWriterSetIndentString(xmlWriter, xmlElemContent); - free(xmlElemContent); - xmlElemContent = NULL; + xmlInitParser(); + xmlDocPtr xmldoc = xmlReadMemory(mem->data, mem->size, NULL, "UTF-8", 0); - xmlTextWriterStartDocument(xmlWriter, "1.0", "UTF-8", NULL); + if (xmldoc == NULL) { + printf("ERROR: could not open memstream\n"); + exit(EXIT_FAILURE); + } - xmlElemName = xmlCharStrdup("zeitkonto"); - xmlTextWriterStartElement(xmlWriter, xmlElemName); - free(xmlElemName); - xmlElemName = NULL; + xmlXPathContextPtr xmlcontext = xmlXPathNewContext(xmldoc); + xmlChar* expr = xmlCharStrdup("/zeitkonto/eintrag[last()]/@saldo"); + xmlXPathObjectPtr xmlnode = xmlXPathEvalExpression(expr, xmlcontext); - xmlElemName = xmlCharStrdup("anfangssaldo"); - xmlElemContent = xmlCharStrdup("00:00"); - xmlTextWriterWriteAttribute(xmlWriter, xmlElemName, xmlElemContent); - free(xmlElemName); - xmlElemName = NULL; - free(xmlElemContent); - xmlElemContent = NULL; + if (xmlnode->nodesetval == NULL || xmlnode->nodesetval->nodeTab == NULL) { + free(expr); + expr = NULL; + xmlXPathFreeObject(xmlnode); + xmlnode = NULL; + expr = xmlCharStrdup("/zeitkonto/@anfangssaldo"); + xmlnode = xmlXPathEvalExpression(expr, xmlcontext); + } - xmlTextWriterEndElement(xmlWriter); - xmlTextWriterEndDocument(xmlWriter); + if (xmlnode->nodesetval->nodeTab == NULL) { + printf("ERROR: could not find an saldo\n"); + xmlFreeDoc(xmldoc); + xmldoc = NULL; + xmlCleanupParser(); - xmlFreeTextWriter(xmlWriter); - xmlWriter = NULL; + free(expr); + expr = NULL; + xmlXPathFreeObject(xmlnode); + xmlnode = NULL; + xmlXPathFreeContext(xmlcontext); + xmlcontext = NULL; + exit(EXIT_FAILURE); + } -#ifdef LIBXML2_15 + strncpy(saldostr, + (char*) xmlnode->nodesetval->nodeTab[0]->children->content, + MAX_STRING_LENGTH); + + free(expr); + expr = NULL; + xmlXPathFreeObject(xmlnode); + xmlnode = NULL; + xmlFreeDoc(xmldoc); + xmldoc = NULL; + xmlXPathFreeContext(xmlcontext); + xmlcontext = NULL; xmlCleanupParser(); -#else - xmlDictCleanup(); - xmlCleanupCharEncodingHandlers(); -#endif + + return saldostr; +} + +void _copy_node_attributes(xmlTextReaderPtr xmlreader, xmlTextWriterPtr xmlwriter) +{ + int attrCount = xmlTextReaderAttributeCount(xmlreader); + for (int i = 0; i < attrCount; i++) { + xmlTextReaderMoveToNextAttribute(xmlreader); + xmlNodePtr xmlnode = xmlTextReaderCurrentNode(xmlreader); + xmlTextWriterWriteAttribute(xmlwriter, xmlnode->name, xmlnode->children[0].content); + } +} + +void _copy_entry(xmlTextReaderPtr xmlreader, xmlTextWriterPtr xmlwriter) +{ + xmlChar* xmlElemContent = xmlCharStrdup("eintrag"); + xmlNodePtr xmlnode = xmlTextReaderCurrentNode(xmlreader); + + if (xmlnode->type == XML_ELEMENT_NODE && xmlStrcmp(xmlnode->name, xmlElemContent) == 0) { + xmlTextWriterStartElement(xmlwriter, xmlnode->name); + _copy_node_attributes(xmlreader, xmlwriter); + xmlTextWriterEndElement(xmlwriter); + } free(xmlElemContent); xmlElemContent = NULL; - free(xmlElemName); - xmlElemName = NULL; } -void write_entry_node(xmlTextWriterPtr xmlWriter, +void _write_entry_node(xmlTextWriterPtr xmlWriter, const char* date, uint8_t begin_hour, uint8_t begin_min, @@ -279,68 +315,52 @@ void write_entry_node(xmlTextWriterPtr xmlWriter, xmlElemName = NULL; } -void read_last_saldo(memFile* mem, char* value) +void init_time_acount() { - xmlInitParser(); - xmlDocPtr xmldoc = xmlReadMemory(mem->data, mem->size, NULL, "UTF-8", 0); - - if (xmldoc == NULL) { - printf("ERROR: could not open memstream\n"); - exit(EXIT_FAILURE); - } + xmlChar* xmlElemName = NULL; + xmlChar* xmlElemContent = NULL; - xmlXPathContextPtr xmlcontext = xmlXPathNewContext(xmldoc); - xmlChar* expr = xmlCharStrdup("/zeitkonto/eintrag[last()]/@saldo"); - xmlXPathObjectPtr xmlnode = xmlXPathEvalExpression(expr, xmlcontext); + xmlCharEncodingHandlerPtr encodingHandler = xmlGetCharEncodingHandler(XML_CHAR_ENCODING_UTF8); + xmlOutputBufferPtr xmloutbuffer = xmlOutputBufferCreateFd(1, encodingHandler); + xmlTextWriterPtr xmlWriter = xmlNewTextWriter(xmloutbuffer); + xmlTextWriterSetIndent(xmlWriter, 8); + xmlElemContent = xmlCharStrdup("\t"); + xmlTextWriterSetIndentString(xmlWriter, xmlElemContent); + free(xmlElemContent); + xmlElemContent = NULL; - if (xmlnode->nodesetval == NULL || xmlnode->nodesetval->nodeTab == NULL) { - free(expr); - expr = NULL; - xmlXPathFreeObject(xmlnode); - xmlnode = NULL; - expr = xmlCharStrdup("/zeitkonto/@anfangssaldo"); - xmlnode = xmlXPathEvalExpression(expr, xmlcontext); - } + xmlTextWriterStartDocument(xmlWriter, "1.0", "UTF-8", NULL); - if (xmlnode->nodesetval->nodeTab == NULL) { - printf("ERROR: could not find an saldo\n"); - xmlFreeDoc(xmldoc); - xmldoc = NULL; - xmlCleanupParser(); + xmlElemName = xmlCharStrdup("zeitkonto"); + xmlTextWriterStartElement(xmlWriter, xmlElemName); + free(xmlElemName); + xmlElemName = NULL; - free(expr); - expr = NULL; - xmlXPathFreeObject(xmlnode); - xmlnode = NULL; - xmlXPathFreeContext(xmlcontext); - xmlcontext = NULL; - exit(EXIT_FAILURE); - } + xmlElemName = xmlCharStrdup("anfangssaldo"); + xmlElemContent = xmlCharStrdup("00:00"); + xmlTextWriterWriteAttribute(xmlWriter, xmlElemName, xmlElemContent); + free(xmlElemName); + xmlElemName = NULL; + free(xmlElemContent); + xmlElemContent = NULL; - strncpy(value, - (char*) xmlnode->nodesetval->nodeTab[0]->children->content, - MAX_STRING_LENGTH); + xmlTextWriterEndElement(xmlWriter); + xmlTextWriterEndDocument(xmlWriter); - free(expr); - expr = NULL; - xmlXPathFreeObject(xmlnode); - xmlnode = NULL; - xmlFreeDoc(xmldoc); - xmldoc = NULL; - xmlXPathFreeContext(xmlcontext); - xmlcontext = NULL; + xmlFreeTextWriter(xmlWriter); + xmlWriter = NULL; +#ifdef LIBXML2_15 xmlCleanupParser(); -} +#else + xmlDictCleanup(); + xmlCleanupCharEncodingHandlers(); +#endif -void copy_node_attributes(xmlTextReaderPtr xmlreader, xmlTextWriterPtr xmlwriter) -{ - int attrCount = xmlTextReaderAttributeCount(xmlreader); - for (int i = 0; i < attrCount; i++) { - xmlTextReaderMoveToNextAttribute(xmlreader); - xmlNodePtr xmlnode = xmlTextReaderCurrentNode(xmlreader); - xmlTextWriterWriteAttribute(xmlwriter, xmlnode->name, xmlnode->children[0].content); - } + free(xmlElemContent); + xmlElemContent = NULL; + free(xmlElemName); + xmlElemName = NULL; } void add_entry(const char* date, @@ -349,15 +369,10 @@ void add_entry(const char* date, uint8_t end_hour, uint8_t end_min) { - memFile* fileContent = init_memFile(); - read_stdin_into_memory(fileContent); - - char* saldostr = malloc(sizeof(char) * MAX_STRING_LENGTH); - if (saldostr == NULL) - return; + memFile* fileContent = _init_memFile(); + _read_stdin_into_memory(fileContent); - memset(saldostr, 0, MAX_STRING_LENGTH); - read_last_saldo(fileContent, saldostr); + char* saldostr = _read_last_saldo(fileContent); const time_t saldo = get_seconds_from_str(saldostr); xmlChar* xmlElemContent = NULL; @@ -378,19 +393,19 @@ void add_entry(const char* date, xmlTextReaderRead(xmlreader); xmlnode = xmlTextReaderCurrentNode(xmlreader); xmlTextWriterStartElement(xmlwriter, xmlnode->name); - copy_node_attributes(xmlreader, xmlwriter); + _copy_node_attributes(xmlreader, xmlwriter); xmlElemContent = xmlCharStrdup("eintrag"); while (xmlTextReaderRead(xmlreader) == 1) { xmlnode = xmlTextReaderCurrentNode(xmlreader); if (xmlnode->type == XML_ELEMENT_NODE && xmlStrcmp(xmlnode->name, xmlElemContent) == 0) { xmlTextWriterStartElement(xmlwriter, xmlnode->name); - copy_node_attributes(xmlreader, xmlwriter); + _copy_node_attributes(xmlreader, xmlwriter); xmlTextWriterEndElement(xmlwriter); } } - write_entry_node(xmlwriter, date, begin_hour, begin_min, end_hour, end_min, saldo); + _write_entry_node(xmlwriter, date, begin_hour, begin_min, end_hour, end_min, saldo); xmlTextWriterEndElement(xmlwriter); xmlTextWriterEndDocument(xmlwriter); @@ -415,21 +430,6 @@ void add_entry(const char* date, saldostr = NULL; } -void copy_entry(xmlTextReaderPtr xmlreader, xmlTextWriterPtr xmlwriter) -{ - xmlChar* xmlElemContent = xmlCharStrdup("eintrag"); - xmlNodePtr xmlnode = xmlTextReaderCurrentNode(xmlreader); - - if (xmlnode->type == XML_ELEMENT_NODE && xmlStrcmp(xmlnode->name, xmlElemContent) == 0) { - xmlTextWriterStartElement(xmlwriter, xmlnode->name); - copy_node_attributes(xmlreader, xmlwriter); - xmlTextWriterEndElement(xmlwriter); - } - - free(xmlElemContent); - xmlElemContent = NULL; -} - void merge(const char* dir) { glob_t* files = malloc(sizeof(glob_t)); @@ -465,7 +465,7 @@ void merge(const char* dir) xmlTextReaderRead(xmlreader); xmlnode = xmlTextReaderCurrentNode(xmlreader); xmlTextWriterStartElement(xmlwriter, xmlnode->name); - copy_node_attributes(xmlreader, xmlwriter); + _copy_node_attributes(xmlreader, xmlwriter); xmlTextReaderClose(xmlreader); xmlFreeTextReader(xmlreader); xmlreader = NULL; @@ -473,7 +473,7 @@ void merge(const char* dir) for (size_t i = 0; i < files->gl_pathc; i++) { xmlreader = xmlReaderForFile(files->gl_pathv[i], "UTF-8", 0); while (xmlTextReaderRead(xmlreader) == 1) { - copy_entry(xmlreader, xmlwriter); + _copy_entry(xmlreader, xmlwriter); } xmlTextReaderClose(xmlreader); xmlFreeTextReader(xmlreader);