#undef MODULE
#define MODULE "xml_dump_filelists: "
-#define PROVIDES 0
-#define CONFLICTS 1
-#define OBSOLETES 2
-#define REQUIRES 3
+#define FORMAT_XML 1
-void dump_filelists_items(xmlTextWriterPtr writer, Package *package)
+void dump_filelists_items(xmlNodePtr root, Package *package)
{
- int rc;
-
- rc = xmlTextWriterStartDocument(writer, NULL, NULL, NULL);
- if (rc < 0) {
- g_critical(MODULE"dump_filelists_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_filelists_items: Error at xmlTextWriterStartElement");
- return;
- }
-
- // Write param pkgid
- rc = xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "pkgid", "%s", (package->pkgId) ? package->pkgId : "");
- if (rc < 0) {
- g_critical(MODULE"dump_filelists_items: Error at xmlTextWriterWriteFormatAttribute");
- return;
- }
+ // Add pkgid attribute
+ 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_filelists_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_filelists_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_filelists_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_filelists_items: Error at xmlTextWriterWriteFormatAttribute");
- 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_filelists_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_filelists_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_filelists_items: Error at xmlTextWriterEndElement");
- return;
- }
// Files dump
- dump_files(writer, package, 0);
-
- // Close package element
- rc = xmlTextWriterEndElement(writer);
- if (rc < 0) {
- g_critical(MODULE"dump_filelists_items: Error at xmlTextWriterEndElement");
- return;
- }
- // Close document (and every still opened tags)
- rc = xmlTextWriterEndDocument(writer);
- if (rc < 0) {
- g_critical(MODULE"dump_filelists_items: Error at xmlTextWriterEndDocument");
- return;
- }
+ dump_files(root, package, 0);
}
char *xml_dump_filelists(Package *package)
{
- xmlBufferPtr buf = xmlBufferCreate();
- if (buf == NULL) {
- g_critical(MODULE"xml_dump_filelists: Error creating the xml buffer");
- return NULL;
- }
+ xmlNodePtr root = NULL;
+ root = xmlNewNode(NULL, BAD_CAST "package");
- xmlTextWriterPtr writer = xmlNewTextWriterMemory(buf, 0);
- if (writer == NULL) {
- g_critical(MODULE"xml_dump_filelists: Error creating the xml writer");
- return NULL;
- }
// Dump IT!
- dump_filelists_items(writer, package);
-
- xmlFreeTextWriter(writer);
-
-
- // Get XML from xmlBuffer without <?xml ...?> header
+ dump_filelists_items(root, package);
+ char *result;
+ xmlBufferPtr buf = xmlBufferCreate();
+ if (buf == NULL) {
+ g_critical(MODULE"xml_dump_filelists: Error creating the xml buffer");
+ return NULL;
+ }
+ // 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, "<package");
- if (!pkg_str) {
- pkg_str = (char*) buf->content;
- }
- char *result = g_strdup(pkg_str);
+ // Cleanup
- xmlBufferFree(buf);
+ xmlFreeNode(root);
return result;
}
#define OBSOLETES 2
#define REQUIRES 3
+#define FORMAT_XML 1
-void dump_pco(xmlTextWriterPtr writer, Package *package, int pcotype)
+#define DATE_STR_MAX_LEN 32
+#define SIZE_STR_MAX_LEN 32
+
+
+void dump_pco(xmlNodePtr root, Package *package, int pcotype)
{
- int rc;
const char *elem_name = NULL;
GSList *files = NULL;
PCOR Element: provides, oboletes, conflicts, requires
************************************/
- rc = xmlTextWriterStartElement(writer, BAD_CAST elem_name);
- if (rc < 0) {
- g_critical(MODULE"dump_pco: Error at xmlTextWriterWriteElement");
- return;
- }
+ xmlNodePtr pcor_node;
+
+ pcor_node = xmlNewChild(root, NULL, BAD_CAST elem_name, NULL);
GSList *element = NULL;
for(element = files; element; element=element->next) {
Element: entry
************************************/
- rc = xmlTextWriterStartElement(writer, BAD_CAST "rpm:entry");
- if (rc < 0) {
- g_critical(MODULE"dump_pco: Error at xmlTextWriterWriteElement");
- return;
- }
+ xmlNodePtr entry_node;
- rc = xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "name", "%s", entry->name);
- if (rc < 0) {
- g_critical(MODULE"dump_pco: Error at xmlTextWriterWriteFormatAttribute");
- return;
- }
+ entry_node = xmlNewChild(pcor_node, NULL, BAD_CAST "rpm:entry", NULL);
+ xmlNewProp(entry_node, BAD_CAST "name", BAD_CAST entry->name);
if (entry->flags && entry->flags[0] != '\0') {
- rc = xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "flags", "%s", entry->flags);
- if (rc < 0) {
- g_critical(MODULE"dump_pco: Error at xmlTextWriterWriteFormatAttribute");
- return;
- }
+ xmlNewProp(entry_node, BAD_CAST "flags", BAD_CAST entry->flags);
if (entry->epoch && entry->epoch[0] != '\0') {
- rc = xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "epoch", "%s", entry->epoch);
- if (rc < 0) {
- g_critical(MODULE"dump_pco: Error at xmlTextWriterWriteFormatAttribute");
- return;
- }
+ xmlNewProp(entry_node, BAD_CAST "epoch", BAD_CAST entry->epoch);
}
if (entry->version && entry->version[0] != '\0') {
- rc = xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "ver", "%s", entry->version);
- if (rc < 0) {
- g_critical(MODULE"dump_pco: Error at xmlTextWriterWriteFormatAttribute");
- return;
- }
+ xmlNewProp(entry_node, BAD_CAST "ver", BAD_CAST entry->version);
}
if (entry->release && entry->release[0] != '\0') {
- rc = xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "rel", "%s", entry->release);
- if (rc < 0) {
- g_critical(MODULE"dump_pco: Error at xmlTextWriterWriteFormatAttribute");
- return;
- }
+ xmlNewProp(entry_node, BAD_CAST "rel", BAD_CAST entry->release);
}
}
if (pcotype == REQUIRES) {
// Add pre attribute
- rc = 0;
- if (entry->pre) {
- rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "pre", BAD_CAST "1");
- } else {
- rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "pre", BAD_CAST "0");
- }
- if (rc < 0) {
- g_critical(MODULE"dump_pco: Error at xmlTextWriterWriteAttribute");
- return;
- }
- }
-
- // Close entry element
- rc = xmlTextWriterEndElement(writer);
- if (rc < 0) {
- g_critical(MODULE"dump_pco: Error at xmlTextWriterEndElement");
- return;
+ xmlNewProp(entry_node, BAD_CAST "pre", BAD_CAST ((entry->pre) ? "1" : "0"));
}
}
-
- // Close PCOR element
- rc = xmlTextWriterEndElement(writer);
- if (rc < 0) {
- g_critical(MODULE"dump_pco: Error at xmlTextWriterEndElement");
- return;
- }
}
-void dump_base_items(xmlTextWriterPtr writer, Package *package)
+void dump_base_items(xmlNodePtr root, Package *package)
{
- int rc;
-
- rc = xmlTextWriterStartDocument(writer, NULL, NULL, NULL);
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterStartDocument");
- return;
- }
-
-
/***********************************
- Element: package
+ Element: package
************************************/
- // Start element package
- rc = xmlTextWriterStartElement(writer, BAD_CAST "package");
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterStartElement");
- return;
- }
-
// Add an attribute with type to package
- rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "type", BAD_CAST "rpm");
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterWriteAttribute");
- return;
- }
+ xmlNewProp(root, BAD_CAST "type", BAD_CAST "rpm");
/***********************************
- Element: name
+ Element: name
************************************/
- rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "name", "%s", (package->name) ? package->name : "");
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterWriteFormatElement");
- return;
- }
+ xmlNewTextChild(root, NULL, BAD_CAST "name", BAD_CAST ((package->name) ? package->name : ""));
/***********************************
- Element: arch
+ Element: arch
************************************/
- rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "arch", "%s", (package->arch) ? package->arch : "");
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterWriteFormatElement");
- return;
- }
+ xmlNewTextChild(root, NULL, BAD_CAST "arch", BAD_CAST ((package->arch) ? package->arch : ""));
/***********************************
- Element: version
+ Element: version
************************************/
- rc = xmlTextWriterStartElement(writer, BAD_CAST "version");
- if (rc < 0) {
- g_critical(MODULE"dump_base_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_base_items: Error at xmlTextWriterWriteFormatAttribute");
- 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_base_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_base_items: Error at xmlTextWriterWriteFormatAttribute");
- return;
- }
-
- // Close version element
- rc = xmlTextWriterEndElement(writer);
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterEndElement");
- return;
- }
+ xmlNewProp(version, BAD_CAST "rel", BAD_CAST ((package->release) ? package->release : ""));
/***********************************
- Element: checksum
+ Element: checksum
************************************/
- rc = xmlTextWriterStartElement(writer, BAD_CAST "checksum");
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterStartElement");
- return;
- }
+ xmlNodePtr checksum;
+
+ checksum = xmlNewTextChild(root, NULL, BAD_CAST "checksum", BAD_CAST ((package->pkgId) ? package->pkgId : ""));
// Write checksum attribute checksum_type
- rc = xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "type", "%s", (package->checksum_type) ? package->checksum_type : "");
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterWriteFormatAttribute");
- return;
- }
+ xmlNewProp(checksum, BAD_CAST "type", BAD_CAST ((package->checksum_type) ? package->checksum_type : ""));
// Write checksum attribute pkgid
- rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "pkgid", BAD_CAST "YES");
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterWriteAttribute");
- return;
- }
-
- // Write element string
- rc = xmlTextWriterWriteFormatString(writer, "%s", (package->pkgId) ? package->pkgId : "");
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterWriteFormatString");
- return;
- }
-
- // Close checksum element
- rc = xmlTextWriterEndElement(writer);
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterEndElement");
- return;
- }
+ xmlNewProp(checksum, BAD_CAST "pkgid", BAD_CAST "YES");
/***********************************
- Element: summary
+ Element: summary
************************************/
- rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "summary", "%s", (package->summary) ? package->summary : "");
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterWriteFormatElement");
- return;
- }
+ xmlNewTextChild(root, NULL, BAD_CAST "summary", BAD_CAST ((package->summary) ? package->summary : ""));
/***********************************
Element: description
************************************/
- rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "description", "%s", (package->description) ? package->description : "");
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterWriteFormatElement");
- return;
- }
+ xmlNewTextChild(root, NULL, BAD_CAST "description", BAD_CAST ((package->description) ? package->description : ""));
/***********************************
- Element: packager
+ Element: packager
************************************/
- rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "packager", "%s", (package->rpm_packager) ? package->rpm_packager : "");
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterWriteFormatElement");
- return;
- }
+ xmlNewTextChild(root, NULL, BAD_CAST "packager", BAD_CAST ((package->rpm_packager) ? package->rpm_packager : ""));
/***********************************
- Element: url
+ Element: url
************************************/
- rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "url", "%s", (package->url) ? package->url : "");
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterWriteFormatElement");
- return;
- }
+ xmlNewTextChild(root, NULL, BAD_CAST "url", BAD_CAST ((package->url) ? package->url : ""));
/***********************************
- Element: time
+ Element: time
************************************/
- rc = xmlTextWriterStartElement(writer, BAD_CAST "time");
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterStartElement");
- return;
- }
+ xmlNodePtr time;
+ char date_str[DATE_STR_MAX_LEN];
+
+ time = xmlNewChild(root, NULL, BAD_CAST "time", NULL);
// Write time attribute file
- rc = xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "file", "%lld", (long long int) package->time_file);
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterWriteFormatAttribute");
- return;
- }
+ g_snprintf(date_str, DATE_STR_MAX_LEN, "%lld", (long long int) package->time_file);
+ xmlNewProp(time, BAD_CAST "file", BAD_CAST date_str);
// Write time attribute build
- rc = xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "build", "%lld", (long long int) package->time_build);
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterWriteFormatAttribute");
- return;
- }
-
- // Close time element
- rc = xmlTextWriterEndElement(writer);
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterEndElement");
- return;
- }
+ g_snprintf(date_str, DATE_STR_MAX_LEN, "%lld", (long long int) package->time_build);
+ xmlNewProp(time, BAD_CAST "build", BAD_CAST date_str);
/***********************************
- Element: size
+ Element: size
************************************/
- rc = xmlTextWriterStartElement(writer, BAD_CAST "size");
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterStartElement");
- return;
- }
+ xmlNodePtr size;
+ char size_str[SIZE_STR_MAX_LEN];
+
+ size = xmlNewChild(root, NULL, BAD_CAST "size", NULL);
// Write size attribute package
- rc = xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "package", "%lld", (long long int) package->size_package);
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterWriteFormatAttribute");
- return;
- }
+ g_snprintf(size_str, SIZE_STR_MAX_LEN, "%lld", (long long int) package->size_package);
+ xmlNewProp(size, BAD_CAST "package", BAD_CAST size_str);
// Write size attribute installed
- rc = xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "installed", "%lld", (long long int) package->size_installed);
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterWriteFormatAttribute");
- return;
- }
+ g_snprintf(size_str, SIZE_STR_MAX_LEN, "%lld", (long long int) package->size_installed);
+ xmlNewProp(size, BAD_CAST "installed", BAD_CAST size_str);
// Write size attribute archive
- rc = xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "archive", "%lld", (long long int) package->size_archive);
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterWriteFormatAttribute");
- return;
- }
-
- // Close size element
- rc = xmlTextWriterEndElement(writer);
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterEndElement");
- return;
- }
+ g_snprintf(size_str, SIZE_STR_MAX_LEN, "%lld", (long long int) package->size_archive);
+ xmlNewProp(size, BAD_CAST "archive", BAD_CAST size_str);
/***********************************
- Element: location
+ Element: location
************************************/
- rc = xmlTextWriterStartElement(writer, BAD_CAST "location");
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterStartElement");
- return;
- }
+ xmlNodePtr location;
+
+ location = xmlNewChild(root, NULL, BAD_CAST "location", NULL);
// Write location attribute href
- rc = xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "href", "%s", (package->location_href) ? package->location_href : "");
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterWriteFormatAttribute");
- return;
- }
+ xmlNewProp(location, BAD_CAST "href", BAD_CAST ((package->location_href) ? package->location_href : ""));
// Write location attribute base
if (package->location_base && package->location_base[0] != '\0') {
- rc = xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "xml:base", "%s", package->location_base);
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterWriteFormatAttribute");
- return;
- }
- }
-
- /* Close location element */
- rc = xmlTextWriterEndElement(writer);
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterEndElement");
- return;
+ xmlNewProp(location, BAD_CAST "xml:base", BAD_CAST package->location_base);
}
/***********************************
- Element: format
+ Element: format
************************************/
- rc = xmlTextWriterStartElement(writer, BAD_CAST "format");
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterStartElement");
- return;
- }
+ xmlNodePtr format;
+
+ format = xmlNewChild(root, NULL, BAD_CAST "format", NULL);
/***********************************
- Element: license
+ Element: license
************************************/
- rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "rpm:license", "%s", (package->rpm_license) ? package->rpm_license : "");
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterWriteFormatElement");
- return;
- }
+ xmlNewTextChild(format, NULL, BAD_CAST "rpm:license", BAD_CAST ((package->rpm_license) ? package->rpm_license : ""));
/***********************************
- Element: vendor
+ Element: vendor
************************************/
- rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "rpm:vendor", "%s", (package->rpm_vendor) ? package->rpm_vendor : "");
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterWriteFormatElement");
- return;
- }
+ xmlNewTextChild(format, NULL, BAD_CAST "rpm:vendor", BAD_CAST ((package->rpm_vendor) ? package->rpm_vendor : ""));
/***********************************
- Element: group
+ Element: group
************************************/
- rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "rpm:group", "%s", (package->rpm_group) ? package->rpm_group : "");
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterWriteFormatElement");
- return;
- }
+ xmlNewTextChild(format, NULL, BAD_CAST "rpm:group", BAD_CAST ((package->rpm_group) ? package->rpm_group : ""));
/***********************************
- Element: buildhost
+ Element: buildhost
************************************/
- rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "rpm:buildhost", "%s", (package->rpm_buildhost) ? package->rpm_buildhost : "");
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterWriteFormatElement");
- return;
- }
+ xmlNewTextChild(format, NULL, BAD_CAST "rpm:buildhost", BAD_CAST ((package->rpm_buildhost) ? package->rpm_buildhost : ""));
/***********************************
- Element: sourcerpm
+ Element: sourcerpm
************************************/
- rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "rpm:sourcerpm", "%s", (package->rpm_sourcerpm) ? package->rpm_sourcerpm : "");
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterWriteFormatElement");
- return;
- }
+ xmlNewTextChild(format, NULL, BAD_CAST "rpm:sourcerpm", BAD_CAST ((package->rpm_sourcerpm) ? package->rpm_sourcerpm : ""));
/***********************************
- Element: header-range
+ Element: header-range
************************************/
- rc = xmlTextWriterStartElement(writer, BAD_CAST "rpm:header-range");
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterStartElement");
- return;
- }
+ xmlNodePtr header_range;
+
+ header_range = xmlNewChild(format, NULL, BAD_CAST "rpm:header-range", NULL);
// Write header-range attribute hdrstart
- rc = xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "start", "%lld", (long long int) package->rpm_header_start);
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterWriteFormatAttribute");
- return;
- }
+ g_snprintf(size_str, SIZE_STR_MAX_LEN, "%lld", (long long int) package->rpm_header_start);
+ xmlNewProp(header_range, BAD_CAST "start", BAD_CAST size_str);
// Write header-range attribute hdrend
- rc = xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "end", "%lld", (long long int) package->rpm_header_end);
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterWriteFormatAttribute");
- return;
- }
-
- // Close header-range element
- rc = xmlTextWriterEndElement(writer);
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterEndElement");
- return;
- }
+ g_snprintf(size_str, SIZE_STR_MAX_LEN, "%lld", (long long int) package->rpm_header_end);
+ xmlNewProp(header_range, BAD_CAST "end", BAD_CAST size_str);
// Files dump
- dump_pco(writer, package, PROVIDES);
- dump_pco(writer, package, REQUIRES);
- dump_pco(writer, package, CONFLICTS);
- dump_pco(writer, package, OBSOLETES);
- dump_files(writer, package, 1);
+ dump_pco(format, package, PROVIDES);
+ dump_pco(format, package, REQUIRES);
+ dump_pco(format, package, CONFLICTS);
+ dump_pco(format, package, OBSOLETES);
+ dump_files(format, package, 1);
+}
- // Close format element
- rc = xmlTextWriterEndElement(writer);
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterEndElement");
- return;
- }
- // Close package element
- rc = xmlTextWriterEndElement(writer);
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterEndElement");
- return;
- }
+char *xml_dump_primary(Package *package)
+{
+ xmlNodePtr root = NULL;
+ root = xmlNewNode(NULL, BAD_CAST "package");
- // Close document (and every still opened tags)
- rc = xmlTextWriterEndDocument(writer);
- if (rc < 0) {
- g_critical(MODULE"dump_base_items: Error at xmlTextWriterEndDocument");
- return;
- }
-}
+ // Dump IT!
+ dump_base_items(root, package);
-char *xml_dump_primary(Package *package)
-{
+ char *result;
xmlBufferPtr buf = xmlBufferCreate();
if (buf == NULL) {
- g_critical(MODULE"xml_dump_primary: Error creating the xml buffer");
+ g_critical(MODULE"xml_dump_other: Error creating the xml buffer");
return NULL;
}
+ // 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);
- xmlTextWriterPtr writer = xmlNewTextWriterMemory(buf, 0);
- if (writer == NULL) {
- g_critical(MODULE"xml_dump_primary: Error creating the xml writer");
- return NULL;
- }
-
- dump_base_items(writer, package);
-
- xmlFreeTextWriter(writer);
-
-
- // Get XML from xmlBuffer without <?xml ...?> header
- char *pkg_str = strstr((const char*) buf->content, "<package");
- if (!pkg_str) {
- pkg_str = (char*) buf->content;
- }
+ // Cleanup
- char *result = g_strdup(pkg_str);
-
- xmlBufferFree(buf);
+ xmlFreeNode(root);
return result;
+
}