#include <libxml/xmlwriter.h>
#include <libxml/parser.h>
#include <libxml/xpath.h>
+#include <libxml/xmlreader.h>
#include "worktime.h"
#include "break.h"
#include "time_format.h"
xmlCleanupParser();
}
+void copyNodeAttributes(xmlTextReaderPtr xmlreader, xmlTextWriterPtr xmlwriter)
+{
+ int attrCount = xmlTextReaderAttributeCount(xmlreader);
+ xmlTextReaderMoveToFirstAttribute(xmlreader);
+ xmlNodePtr xmlnode = xmlTextReaderCurrentNode(xmlreader);
+ for (int i = 0; i < attrCount; i++) {
+ xmlTextWriterWriteAttribute(xmlwriter, xmlnode->name, xmlnode->children[0].content);
+ xmlTextReaderMoveToNextAttribute(xmlreader);
+ xmlnode = xmlTextReaderCurrentNode(xmlreader);
+ }
+}
+
+
+void addEntry(int begin_hour,
+ int begin_min,
+ int end_hour,
+ int end_min,
+ const char* file_path)
+{
+ char* saldo = malloc(sizeof(char) * MAX_STRING_LENGTH);
+ memset(saldo, 0, MAX_STRING_LENGTH);
+
+ readLastSaldo(file_path, saldo);
+
+ xmlChar* xmlElemContent = NULL;
+ xmlTextWriterPtr xmlwriter = xmlNewTextWriterFilename("/dev/stdout", 0);
+ xmlTextWriterSetIndent(xmlwriter, 8);
+ xmlElemContent = xmlCharStrdup("\t");
+ xmlTextWriterSetIndentString(xmlwriter, xmlElemContent);
+ free(xmlElemContent);
+ xmlElemContent = NULL;
+
+ xmlTextReaderPtr xmlreader = xmlReaderForFile(file_path, "UTF-8", 0);
+ xmlNodePtr xmlnode = NULL;
+
+ xmlTextWriterStartDocument(xmlwriter, "1.0", "UTF-8", NULL);
+
+ while (xmlTextReaderRead(xmlreader) == 1) {
+ xmlnode = xmlTextReaderCurrentNode(xmlreader);
+ if (xmlnode->type == XML_ELEMENT_NODE) {
+ xmlTextWriterStartElement(xmlwriter, xmlnode->name);
+ copyNodeAttributes(xmlreader, xmlwriter);
+ xmlTextWriterEndElement(xmlwriter);
+ }
+ }
+
+ xmlTextWriterEndDocument(xmlwriter);
+
+ xmlFreeTextWriter(xmlwriter);
+ xmlFreeTextReader(xmlreader);
+
+ free(saldo);
+ saldo = NULL;
+}
+
int main(int argc, char* argv[])
{
if (argc < 2) {
printf("ERROR: %s add <begin_hours> <begin_minutes> <end_hours> <end_minutes> <inputfile>\n", argv[0]);
return 1;
}
- char* saldo = malloc(sizeof(char) * MAX_STRING_LENGTH);
- memset(saldo, 0, MAX_STRING_LENGTH);
-
- readLastSaldo(argv[6], saldo);
+ addEntry(atoi(argv[2]), atoi(argv[3]), atoi(argv[4]), atoi(argv[5]), argv[6]);
- free(saldo);
- saldo = NULL;
return 0;
}