From 676024f10507d569a73d43904d0b5d9aa7ce23aa Mon Sep 17 00:00:00 2001 From: Tomas Mlcoch Date: Mon, 19 Mar 2012 10:05:01 +0100 Subject: [PATCH] use xmlTree in xml_dump_other --- src/xml_dump_other.c | 179 ++++++++++++--------------------------------------- 1 file changed, 40 insertions(+), 139 deletions(-) diff --git a/src/xml_dump_other.c b/src/xml_dump_other.c index fcac8af..6d87837 100644 --- a/src/xml_dump_other.c +++ b/src/xml_dump_other.c @@ -11,17 +11,13 @@ #undef MODULE #define MODULE "xml_dump_other: " +#define FORMAT_XML 1 -#define PROVIDES 0 -#define CONFLICTS 1 -#define OBSOLETES 2 -#define REQUIRES 3 +#define DATE_MAX_LEN 32 -void dump_changelog(xmlTextWriterPtr writer, Package *package) +void dump_changelog(xmlNodePtr root, Package *package) { - int rc; - if (!package->changelogs) { return; } @@ -38,184 +34,89 @@ void dump_changelog(xmlTextWriterPtr writer, Package *package) // Element: Changelog // ************************************ - // Open changelog element - rc = xmlTextWriterStartElement(writer, BAD_CAST "changelog"); - if (rc < 0) { - g_critical(MODULE"dump_changelog: Error at xmlTextWriterWriteElement"); - return; - } + xmlNodePtr changelog; + + // Add changelog element + changelog = xmlNewTextChild(root, NULL, BAD_CAST "changelog", BAD_CAST ((entry->changelog) ? entry->changelog : "")); // Write param author - rc = xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "author", "%s", (entry->author) ? entry->author : ""); - if (rc < 0) { - g_critical(MODULE"dump_changelog: Error at xmlTextWriterWriteAttribute"); - return; - } + xmlNewProp(changelog, BAD_CAST "author", BAD_CAST ((entry->author) ? entry->author : "")); // Write param date - rc = xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "date", "%lld", (long long int) entry->date); - if (rc < 0) { - g_critical(MODULE"dump_changelog: Error at xmlTextWriterWriteFormatAttribute"); - return; - } - - // Write changelog text - rc = xmlTextWriterWriteFormatString(writer, "%s", (entry->changelog) ? entry->changelog : ""); - if (rc < 0) { - g_critical(MODULE"dump_changelog: Error at xmlTextWriterWriteFormatString"); - return; - } - - // Close changelog element - rc = xmlTextWriterEndElement(writer); - if (rc < 0) { - g_critical(MODULE"dump_changelog: Error at xmlTextWriterEndElement"); - return; - } + char date_str[DATE_MAX_LEN]; + g_snprintf(date_str, DATE_MAX_LEN, "%lld", (long long int) entry->date); + xmlNewProp(changelog, BAD_CAST "date", BAD_CAST date_str); } } -void dump_other_items(xmlTextWriterPtr writer, Package *package) +void dump_other_items(xmlNodePtr root, Package *package) { - int rc; - - rc = xmlTextWriterStartDocument(writer, NULL, NULL, NULL); - if (rc < 0) { - g_critical(MODULE"dump_other_items: Error at xmlTextWriterStartDocument"); - return; - } - - /*********************************** - Element: package + Element: package ************************************/ - // Open package element - rc = xmlTextWriterStartElement(writer, BAD_CAST "package"); - if (rc < 0) { - g_critical(MODULE"dump_other_items: Error at xmlTextWriterStartElement"); - return; - } - // Add pkgid attribute - rc = xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "pkgid", "%s", (package->pkgId) ? package->pkgId : ""); - if (rc < 0) { - g_critical(MODULE"dump_other_items: Error at xmlTextWriterWriteFormatAttribute"); - return; - } + xmlNewProp(root, BAD_CAST "pkgid", BAD_CAST ((package->pkgId) ? package->pkgId : "")); // Add name attribute - rc = xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "name", "%s", (package->name) ? package->name : ""); - if (rc < 0) { - g_critical(MODULE"dump_other_items: Error at xmlTextWriterWriteFormatAttribute"); - return; - } + xmlNewProp(root, BAD_CAST "name", BAD_CAST ((package->name) ? package->name : "")); // Add arch attribute - rc = xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "arch", "%s", (package->arch) ? package->arch : ""); - if (rc < 0) { - g_critical(MODULE"dump_other_items: Error at xmlTextWriterWriteFormatAttribute"); - return; - } + xmlNewProp(root, BAD_CAST "arch", BAD_CAST ((package->arch) ? package->arch : "")); /*********************************** - Element: version + Element: version ************************************/ - // Open version element - rc = xmlTextWriterStartElement(writer, BAD_CAST "version"); - if (rc < 0) { - g_critical(MODULE"dump_other_items: Error at xmlTextWriterStartElement"); - return; - } + xmlNodePtr version; + + // Add version element + version = xmlNewChild(root, NULL, BAD_CAST "version", NULL); // Write version attribute epoch - rc = xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "epoch", "%s", (package->epoch) ? package->epoch : "0"); - if (rc < 0) { - g_critical(MODULE"dump_other_items: Error at xmlTextWriterWrite(Format)Attribute"); - return; - } + xmlNewProp(version, BAD_CAST "epoch", BAD_CAST ((package->epoch) ? package->epoch : "")); // Write version attribute ver - rc = xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "ver", "%s", (package->version) ? package->version : ""); - if (rc < 0) { - g_critical(MODULE"dump_other_items: Error at xmlTextWriterWriteFormatAttribute"); - return; - } + xmlNewProp(version, BAD_CAST "ver", BAD_CAST ((package->version) ? package->version : "")); // Write version attribute rel - rc = xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "rel", "%s", (package->release) ? package->release : ""); - if (rc < 0) { - g_critical(MODULE"dump_other_items: Error at xmlTextWriterWriteFormatAttribute"); - return; - } + xmlNewProp(version, BAD_CAST "rel", BAD_CAST ((package->release) ? package->release : "")); - // Close version element - rc = xmlTextWriterEndElement(writer); - if (rc < 0) { - g_critical(MODULE"dump_other_items: Error at xmlTextWriterEndElement"); - return; - } + // Changelog dump - // Files dump + dump_changelog(root, package); +} - dump_changelog(writer, package); +char *xml_dump_other(Package *package) +{ + xmlNodePtr root = NULL; + root = xmlNewNode(NULL, BAD_CAST "package"); - // Close package element - rc = xmlTextWriterEndElement(writer); - if (rc < 0) { - g_critical(MODULE"dump_other_items: Error at xmlTextWriterEndElement"); - return; - } - // Close document (and every still opened tags) - rc = xmlTextWriterEndDocument(writer); - if (rc < 0) { - g_critical(MODULE"dump_other_items: Error at xmlTextWriterEndDocument"); - return; - } -} + // Dump IT! + dump_other_items(root, package); -char *xml_dump_other(Package *package) -{ + char *result; xmlBufferPtr buf = xmlBufferCreate(); if (buf == NULL) { g_critical(MODULE"xml_dump_other: Error creating the xml buffer"); return NULL; } - - xmlTextWriterPtr writer = xmlNewTextWriterMemory(buf, 0); - if (writer == NULL) { - g_critical(MODULE"xml_dump_other: Error creating the xml writer"); - return NULL; - } - - - // Dump IT! - - dump_other_items(writer, package); - - - xmlFreeTextWriter(writer); - - - // Get XML from xmlBuffer without header - + // Seems to be little bit faster than xmlDocDumpFormatMemory + xmlNodeDump(buf, NULL, root, 1, FORMAT_XML); assert(buf->content); + result = g_strdup((char *) buf->content); + xmlBufferFree(buf); - char *pkg_str = strstr((const char*) buf->content, "content; - } - char *result = g_strdup(pkg_str); + // Cleanup - xmlBufferFree(buf); + xmlFreeNode(root); return result; } -- 2.7.4