From 12658b7bd6059ead52123484c640695b2a464acc Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Mon, 16 Feb 2026 18:40:06 +0100 Subject: [PATCH] change fixed str to define const --- src/xml.c | 80 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 31 deletions(-) diff --git a/src/xml.c b/src/xml.c index 31aa841..d07ad4e 100644 --- a/src/xml.c +++ b/src/xml.c @@ -14,6 +14,24 @@ #define MAX_STRING_LENGTH 36 #define CHUCK_SIZE 32 +#define XMLVERSION "1.0" +#define UTF8 "UTF-8" +#define TIMEACOUNT "zeitkonto" +#define ENTRY "eintrag" +#define WEEKDAY "wochentag" +#define DATE "date" +#define BEGIN "begin" +#define END "end" +#define BREAK "pause" +#define SOLLWORKTIME "sollarbeitszeit" +#define WORKTIME "arbeitszeit" +#define HOURS "stunden" +#define BEGINSALDO "anfangssaldo" +#define SALDO "saldo" + +#define BEGINSALDOXPATH "/zeitkonto/@anfangssaldo" +#define SALDOXPATH "/zeitkonto/eintrag[last()]/@saldo" + mem_file_t* _init_mem() { mem_file_t* mem = malloc(sizeof(mem_file_t)); @@ -89,7 +107,7 @@ char* _read_last_saldo(mem_file_t* mem) return NULL; xmlInitParser(); - xmlDocPtr xmldoc = xmlReadMemory(mem->data, mem->size, NULL, "UTF-8", 0); + xmlDocPtr xmldoc = xmlReadMemory(mem->data, mem->size, NULL, UTF8, 0); if (xmldoc == NULL) { printf("ERROR: could not open memstream\n"); @@ -97,16 +115,16 @@ char* _read_last_saldo(mem_file_t* mem) } xmlXPathContextPtr xmlcontext = xmlXPathNewContext(xmldoc); - xmlChar* expr = xmlCharStrdup("/zeitkonto/eintrag[last()]/@saldo"); - xmlXPathObjectPtr xmlnode = xmlXPathEvalExpression(expr, xmlcontext); + xmlChar* xpath = xmlCharStrdup(SALDOXPATH); + xmlXPathObjectPtr xmlnode = xmlXPathEvalExpression(xpath, xmlcontext); if (xmlnode->nodesetval == NULL || xmlnode->nodesetval->nodeTab == NULL) { - free(expr); - expr = NULL; + free(xpath); + xpath = NULL; xmlXPathFreeObject(xmlnode); xmlnode = NULL; - expr = xmlCharStrdup("/zeitkonto/@anfangssaldo"); - xmlnode = xmlXPathEvalExpression(expr, xmlcontext); + xpath = xmlCharStrdup(BEGINSALDOXPATH); + xmlnode = xmlXPathEvalExpression(xpath, xmlcontext); } if (xmlnode->nodesetval->nodeTab == NULL) { @@ -115,8 +133,8 @@ char* _read_last_saldo(mem_file_t* mem) xmldoc = NULL; xmlCleanupParser(); - free(expr); - expr = NULL; + free(xpath); + xpath = NULL; xmlXPathFreeObject(xmlnode); xmlnode = NULL; xmlXPathFreeContext(xmlcontext); @@ -128,8 +146,8 @@ char* _read_last_saldo(mem_file_t* mem) (char*) xmlnode->nodesetval->nodeTab[0]->children->content, MAX_STRING_LENGTH); - free(expr); - expr = NULL; + free(xpath); + xpath = NULL; xmlXPathFreeObject(xmlnode); xmlnode = NULL; xmlFreeDoc(xmldoc); @@ -153,7 +171,7 @@ void _copy_node_attributes(xmlTextReaderPtr xmlreader, xmlTextWriterPtr xmlwrite void _copy_entry(xmlTextReaderPtr xmlreader, xmlTextWriterPtr xmlwriter) { - xmlChar* xmlElemContent = xmlCharStrdup("eintrag"); + xmlChar* xmlElemContent = xmlCharStrdup(ENTRY); xmlNodePtr xmlnode = xmlTextReaderCurrentNode(xmlreader); if (xmlnode->type == XML_ELEMENT_NODE && xmlStrcmp(xmlnode->name, xmlElemContent) == 0) { @@ -223,26 +241,26 @@ void _write_entry_node(xmlTextWriterPtr xmlWriter, const time_t breaktime = get_break_time(brutto_worktime); const time_t updated_saldo = last_saldo + (overtime * -1); - _write_element(xmlWriter, "eintrag"); + _write_element(xmlWriter, ENTRY); char* wday_short_str = get_weekday_short_str(end_tm.tm_wday); - _write_attribute(xmlWriter, "wochentag", &wday_short_str); + _write_attribute(xmlWriter, WEEKDAY, &wday_short_str); char* datestr = get_date_str(begin_tm); - _write_attribute(xmlWriter, "datum", &datestr); + _write_attribute(xmlWriter, DATE, &datestr); char* begin_str = get_time_str_from_int(begin_tm.tm_hour, begin_tm.tm_min); - _write_attribute(xmlWriter, "begin", &begin_str); + _write_attribute(xmlWriter, BEGIN, &begin_str); char* end_str = get_time_str_from_int(end_tm.tm_hour, end_tm.tm_min); - _write_attribute(xmlWriter, "ende", &end_str); + _write_attribute(xmlWriter, END, &end_str); char* breaktimestr = get_time_str(breaktime); - _write_attribute(xmlWriter, "pause", &breaktimestr); + _write_attribute(xmlWriter, BREAK, &breaktimestr); char* solltimestr = get_time_str(SOLL_WORKTIME); - _write_attribute(xmlWriter, "sollarbeitszeit", &solltimestr); + _write_attribute(xmlWriter, SOLLWORKTIME, &solltimestr); char* netto_worktimestr = get_time_str(netto_worktime); - _write_attribute(xmlWriter, "arbeitszeit", &netto_worktimestr); + _write_attribute(xmlWriter, WORKTIME, &netto_worktimestr); char* overtimestr = get_time_overtime_str(overtime); - _write_attribute(xmlWriter, "stunden", &overtimestr); + _write_attribute(xmlWriter, HOURS, &overtimestr); char* updated_saldostr = get_time_str(updated_saldo); - _write_attribute(xmlWriter, "saldo", &updated_saldostr); + _write_attribute(xmlWriter, SALDO, &updated_saldostr); xmlTextWriterEndElement(xmlWriter); } @@ -258,12 +276,12 @@ void init_time_acount(const uint8_t hour, const uint8_t min) free(xmlElemContent); xmlElemContent = NULL; - xmlTextWriterStartDocument(xmlWriter, "1.0", "UTF-8", NULL); + xmlTextWriterStartDocument(xmlWriter, XMLVERSION, UTF8, NULL); - _write_element(xmlWriter, "zeitkonto"); + _write_element(xmlWriter, TIMEACOUNT); char* timestr = get_time_str_from_int(hour, min); - _write_attribute(xmlWriter, "anfangssaldo", ×tr); + _write_attribute(xmlWriter, BEGINSALDO, ×tr); xmlTextWriterEndElement(xmlWriter); xmlTextWriterEndDocument(xmlWriter); @@ -303,17 +321,17 @@ void add_entry(const char* date, free(xmlElemContent); xmlElemContent = NULL; - xmlTextReaderPtr xmlreader = xmlReaderForMemory(file_content->data, file_content->size, NULL, "UTF-8", 0); + xmlTextReaderPtr xmlreader = xmlReaderForMemory(file_content->data, file_content->size, NULL, UTF8, 0); xmlNodePtr xmlnode = NULL; - xmlTextWriterStartDocument(xmlwriter, "1.0", "UTF-8", NULL); + xmlTextWriterStartDocument(xmlwriter, XMLVERSION, UTF8, NULL); xmlTextReaderRead(xmlreader); xmlnode = xmlTextReaderCurrentNode(xmlreader); xmlTextWriterStartElement(xmlwriter, xmlnode->name); _copy_node_attributes(xmlreader, xmlwriter); - xmlElemContent = xmlCharStrdup("eintrag"); + xmlElemContent = xmlCharStrdup(ENTRY); while (xmlTextReaderRead(xmlreader) == 1) { xmlnode = xmlTextReaderCurrentNode(xmlreader); if (xmlnode->type == XML_ELEMENT_NODE && xmlStrcmp(xmlnode->name, xmlElemContent) == 0) { @@ -374,10 +392,10 @@ void merge(const char* dir) free(xmlElemContent); xmlElemContent = NULL; - xmlTextReaderPtr xmlreader = xmlReaderForFile(files->gl_pathv[0], "UTF-8", 0); + xmlTextReaderPtr xmlreader = xmlReaderForFile(files->gl_pathv[0], UTF8, 0); xmlNodePtr xmlnode = NULL; - xmlTextWriterStartDocument(xmlwriter, "1.0", "UTF-8", NULL); + xmlTextWriterStartDocument(xmlwriter, XMLVERSION, UTF8, NULL); xmlTextReaderRead(xmlreader); xmlnode = xmlTextReaderCurrentNode(xmlreader); @@ -388,7 +406,7 @@ void merge(const char* dir) xmlreader = NULL; for (size_t i = 0; i < files->gl_pathc; i++) { - xmlreader = xmlReaderForFile(files->gl_pathv[i], "UTF-8", 0); + xmlreader = xmlReaderForFile(files->gl_pathv[i], UTF8, 0); while (xmlTextReaderRead(xmlreader) == 1) { _copy_entry(xmlreader, xmlwriter); } -- 2.47.3