From 86199caa85b8e0dd1f54d416ef88d44b5c572594 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sun, 15 Feb 2026 11:59:22 +0100 Subject: [PATCH] refactor write xml attribute --- src/xml.c | 112 +++++++++++------------------------------------------- 1 file changed, 22 insertions(+), 90 deletions(-) diff --git a/src/xml.c b/src/xml.c index a273306..2b7d7ce 100644 --- a/src/xml.c +++ b/src/xml.c @@ -184,6 +184,19 @@ struct tm _init_tm_with_date(const char* date, const uint8_t hour, const uint8_t return value; } +void _write_attribute(xmlTextWriterPtr xmlWriter, const char* name, char** value) +{ + xmlChar* xmlElemName = xmlCharStrdup(name); + xmlChar* xmlElemContent = xmlCharStrdup(*value); + xmlTextWriterWriteAttribute(xmlWriter, xmlElemName, xmlElemContent); + free(xmlElemName); + xmlElemName = NULL; + free(xmlElemContent); + xmlElemContent = NULL; + free(*value); + *value = NULL; +} + void _write_entry_node(xmlTextWriterPtr xmlWriter, const char* date, const uint8_t begin_hour, @@ -211,104 +224,23 @@ void _write_entry_node(xmlTextWriterPtr xmlWriter, xmlElemName = NULL; char* wday_short_str = get_weekday_short_str(end_tm.tm_wday); - xmlElemName = xmlCharStrdup("wochentag"); - xmlElemContent = xmlCharStrdup(wday_short_str); - xmlTextWriterWriteAttribute(xmlWriter, xmlElemName, xmlElemContent); - free(wday_short_str); - wday_short_str = NULL; - free(xmlElemName); - xmlElemName = NULL; - free(xmlElemContent); - xmlElemContent = NULL; - + _write_attribute(xmlWriter, "wochentag", &wday_short_str); char* datestr = get_date_str(begin_tm); - xmlElemName = xmlCharStrdup("datum"); - xmlElemContent = xmlCharStrdup(datestr); - xmlTextWriterWriteAttribute(xmlWriter, xmlElemName, xmlElemContent); - free(datestr); - datestr = NULL; - free(xmlElemName); - xmlElemName = NULL; - free(xmlElemContent); - xmlElemContent = NULL; - + _write_attribute(xmlWriter, "datum", &datestr); char* begin_str = get_time_str_from_tm(begin_tm); - xmlElemName = xmlCharStrdup("begin"); - xmlElemContent = xmlCharStrdup(begin_str); - xmlTextWriterWriteAttribute(xmlWriter, xmlElemName, xmlElemContent); - free(begin_str); - begin_str = NULL; - free(xmlElemName); - xmlElemName = NULL; - free(xmlElemContent); - xmlElemContent = NULL; - + _write_attribute(xmlWriter, "begin", &begin_str); char* end_str = get_time_str_from_tm(end_tm); - xmlElemName = xmlCharStrdup("ende"); - xmlElemContent = xmlCharStrdup(end_str); - xmlTextWriterWriteAttribute(xmlWriter, xmlElemName, xmlElemContent); - free(end_str); - end_str = NULL; - free(xmlElemName); - xmlElemName = NULL; - free(xmlElemContent); - xmlElemContent = NULL; - + _write_attribute(xmlWriter, "ende", &end_str); char* breaktimestr = get_time_str(breaktime); - xmlElemName = xmlCharStrdup("pause"); - xmlElemContent = xmlCharStrdup(breaktimestr); - xmlTextWriterWriteAttribute(xmlWriter, xmlElemName, xmlElemContent); - free(breaktimestr); - breaktimestr = NULL; - free(xmlElemName); - xmlElemName = NULL; - free(xmlElemContent); - xmlElemContent = NULL; - + _write_attribute(xmlWriter, "pause", &breaktimestr); char* solltimestr = get_time_str(SOLL_WORKTIME); - xmlElemName = xmlCharStrdup("sollarbeitszeit"); - xmlElemContent = xmlCharStrdup(solltimestr); - xmlTextWriterWriteAttribute(xmlWriter, xmlElemName, xmlElemContent); - free(solltimestr); - solltimestr = NULL; - free(xmlElemName); - xmlElemName = NULL; - free(xmlElemContent); - xmlElemContent = NULL; - + _write_attribute(xmlWriter, "sollarbeitszeit", &solltimestr); char* netto_worktimestr = get_time_str(netto_worktime); - xmlElemName = xmlCharStrdup("arbeitszeit"); - xmlElemContent = xmlCharStrdup(netto_worktimestr); - xmlTextWriterWriteAttribute(xmlWriter, xmlElemName, xmlElemContent); - free(netto_worktimestr); - netto_worktimestr = NULL; - free(xmlElemName); - xmlElemName = NULL; - free(xmlElemContent); - xmlElemContent = NULL; - + _write_attribute(xmlWriter, "arbeitszeit", &netto_worktimestr); char* overtimestr = get_time_overtime_str(overtime); - xmlElemName = xmlCharStrdup("stunden"); - xmlElemContent = xmlCharStrdup(overtimestr); - xmlTextWriterWriteAttribute(xmlWriter, xmlElemName, xmlElemContent); - free(overtimestr); - overtimestr = NULL; - free(xmlElemName); - xmlElemName = NULL; - free(xmlElemContent); - xmlElemContent = NULL; - + _write_attribute(xmlWriter, "stunden", &overtimestr); char* updated_saldostr = get_time_str(updated_saldo); - xmlElemName = xmlCharStrdup("saldo"); - xmlElemContent = xmlCharStrdup(updated_saldostr); - xmlTextWriterWriteAttribute(xmlWriter, xmlElemName, xmlElemContent); - free(updated_saldostr); - updated_saldostr = NULL; - free(xmlElemName); - xmlElemName = NULL; - free(xmlElemContent); - xmlElemContent = NULL; - + _write_attribute(xmlWriter, "saldo", &updated_saldostr); xmlTextWriterEndElement(xmlWriter); free(xmlElemContent); -- 2.47.3