#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));
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");
}
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) {
xmldoc = NULL;
xmlCleanupParser();
- free(expr);
- expr = NULL;
+ free(xpath);
+ xpath = NULL;
xmlXPathFreeObject(xmlnode);
xmlnode = NULL;
xmlXPathFreeContext(xmlcontext);
(char*) xmlnode->nodesetval->nodeTab[0]->children->content,
MAX_STRING_LENGTH);
- free(expr);
- expr = NULL;
+ free(xpath);
+ xpath = NULL;
xmlXPathFreeObject(xmlnode);
xmlnode = NULL;
xmlFreeDoc(xmldoc);
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) {
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);
}
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);
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) {
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);
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);
}