Better XML dump output
authorTomas Mlcoch <tmlcoch@redhat.com>
Thu, 12 Apr 2012 07:38:16 +0000 (09:38 +0200)
committerTomas Mlcoch <tmlcoch@redhat.com>
Thu, 12 Apr 2012 07:38:16 +0000 (09:38 +0200)
src/createrepo_c.c
src/mergerepo_c.c
src/repomd.c
src/xml_dump_filelists.c
src/xml_dump_other.c
src/xml_dump_primary.c

index a5f5a7c..8eb4a88 100644 (file)
@@ -574,9 +574,9 @@ int main(int argc, char **argv) {
     g_thread_pool_free(pool, FALSE, TRUE);
     g_message("Pool finished");
 
-    cw_puts(user_data.pri_f, "\n</metadata>\n");
-    cw_puts(user_data.fil_f, "\n</filelists>\n");
-    cw_puts(user_data.oth_f, "\n</otherdata>\n");
+    cw_puts(user_data.pri_f, "</metadata>");
+    cw_puts(user_data.fil_f, "</filelists>");
+    cw_puts(user_data.oth_f, "</otherdata>");
 
     cw_close(user_data.pri_f);
     cw_close(user_data.fil_f);
index d5ecac5..c65e73f 100644 (file)
@@ -427,9 +427,9 @@ int dump_merged_metadata(GHashTable *merged_hashtable, long packages, gchar *gro
 
     // Write xml footers
 
-    cw_puts(pri_f, "\n</metadata>\n");
-    cw_puts(fil_f, "\n</filelists>\n");
-    cw_puts(oth_f, "\n</otherdata>\n");
+    cw_puts(pri_f, "</metadata>");
+    cw_puts(fil_f, "</filelists>");
+    cw_puts(oth_f, "</otherdata>");
 
 
     // Close files
index 664b8c4..690777d 100644 (file)
@@ -24,7 +24,8 @@
 #define RPM_NS          "http://linux.duke.edu/metadata/rpm"
 #define XMLNS_NS        "http://linux.duke.edu/metadata/repo"
 
-#define FORMAT_XML  1
+#define XML_ENC         "UTF-8"
+#define FORMAT_XML      1
 
 #define REPOMD_OK       0
 #define REPOMD_ERR      1
@@ -453,7 +454,8 @@ char *repomd_xml_dump(long revision, struct repomdData *pri_xml, struct repomdDa
     // Dump IT!
 
     char *result;
-    xmlDocDumpFormatMemory(doc, (xmlChar **) &result, NULL, FORMAT_XML);
+    //xmlDocDumpFormatMemory(doc, (xmlChar **) &result, NULL, FORMAT_XML);
+    xmlDocDumpFormatMemoryEnc(doc, (xmlChar **) &result, NULL, XML_ENC, FORMAT_XML);
 
 
     // Clean up
index 7935b37..b34328c 100644 (file)
@@ -11,7 +11,8 @@
 #undef MODULE
 #define MODULE "xml_dump_filelists: "
 
-#define FORMAT_XML  1
+#define FORMAT_XML      1
+#define FORMAT_LEVEL    0
 
 
 void dump_filelists_items(xmlNodePtr root, Package *package)
@@ -72,9 +73,11 @@ char *xml_dump_filelists(Package *package)
         return NULL;
     }
     // Seems to be little bit faster than xmlDocDumpFormatMemory
-    xmlNodeDump(buf, NULL, root, 1, FORMAT_XML);
+    xmlNodeDump(buf, NULL, root, FORMAT_LEVEL, FORMAT_XML);
     assert(buf->content);
-    result = g_strdup((char *) buf->content);
+    result = g_strndup((char *) buf->content, (buf->use+1)); // g_strndup allocate (buf->use+1
+    result[buf->use]     = '\n';
+    result[buf->use+1]   = '\0';
     xmlBufferFree(buf);
 
 
index f178b13..8487a17 100644 (file)
@@ -11,7 +11,8 @@
 #undef MODULE
 #define MODULE "xml_dump_other: "
 
-#define FORMAT_XML  1
+#define FORMAT_XML      1
+#define FORMAT_LEVEL    0
 
 #define DATE_MAX_LEN    32
 
@@ -108,9 +109,11 @@ char *xml_dump_other(Package *package)
         return NULL;
     }
     // Seems to be little bit faster than xmlDocDumpFormatMemory
-    xmlNodeDump(buf, NULL, root, 1, FORMAT_XML);
+    xmlNodeDump(buf, NULL, root, FORMAT_LEVEL, FORMAT_XML);
     assert(buf->content);
-    result = g_strdup((char *) buf->content);
+    result = g_strndup((char *) buf->content, (buf->use+1)); // g_strndup allocate (buf->use+1
+    result[buf->use]     = '\n';
+    result[buf->use+1]   = '\0';
     xmlBufferFree(buf);
 
 
index a302852..9fe8fa7 100644 (file)
@@ -16,7 +16,8 @@
 #define OBSOLETES   2
 #define REQUIRES    3
 
-#define FORMAT_XML  1
+#define FORMAT_XML      1
+#define FORMAT_LEVEL    0
 
 #define DATE_STR_MAX_LEN    32
 #define SIZE_STR_MAX_LEN    32
@@ -241,14 +242,14 @@ void dump_base_items(xmlNodePtr root, Package *package)
 
     location = xmlNewChild(root, NULL, BAD_CAST "location", NULL);
 
-    // Write location attribute href
-    xmlNewProp(location, BAD_CAST "href", BAD_CAST ((package->location_href) ? package->location_href : ""));
-
-    // Write location attribute base
+// Write location attribute base
     if (package->location_base && package->location_base[0] != '\0') {
         xmlNewProp(location, BAD_CAST "xml:base", BAD_CAST package->location_base);
     }
 
+    // Write location attribute href
+    xmlNewProp(location, BAD_CAST "href", BAD_CAST ((package->location_href) ? package->location_href : ""));
+
 
     /***********************************
      Element: format
@@ -339,9 +340,11 @@ char *xml_dump_primary(Package *package)
         return NULL;
     }
     // Seems to be little bit faster than xmlDocDumpFormatMemory
-    xmlNodeDump(buf, NULL, root, 1, FORMAT_XML);
+    xmlNodeDump(buf, NULL, root, FORMAT_LEVEL, FORMAT_XML);
     assert(buf->content);
-    result = g_strdup((char *) buf->content);
+    result = g_strndup((char *) buf->content, (buf->use+1)); // g_strndup allocate (buf->use+1)+1
+    result[buf->use]     = '\n';
+    result[buf->use+1]   = '\0';
     xmlBufferFree(buf);