xml_file: Support for cr_ContentStat.
authorTomas Mlcoch <tmlcoch@redhat.com>
Thu, 6 Jun 2013 11:11:09 +0000 (13:11 +0200)
committerTomas Mlcoch <tmlcoch@redhat.com>
Thu, 6 Jun 2013 11:28:55 +0000 (13:28 +0200)
src/compression_wrapper.c
src/xml_file.c
src/xml_file.h

index bf105b3..990c80c 100644 (file)
@@ -668,9 +668,14 @@ cr_close(CR_FILE *cr_file, GError **err)
             break;
     }
 
-    if (cr_file->stat)
-        cr_file->stat->checksum = cr_checksum_final(cr_file->checksum_ctx,
-                                                    NULL);
+    if (cr_file->stat) {
+        g_free(cr_file->stat->checksum);
+        if (cr_file->checksum_ctx)
+            cr_file->stat->checksum = cr_checksum_final(cr_file->checksum_ctx,
+                                                        NULL);
+        else
+            cr_file->stat->checksum = NULL;
+    }
 
     g_free(cr_file);
 
index 4d312c6..af945d4 100644 (file)
 #define XML_OTHER_FOOTER        "</otherdata>"
 
 cr_XmlFile *
-cr_xmlfile_open(const char *filename,
-                cr_XmlFileType type,
-                cr_CompressionType comtype,
-                GError **err)
+cr_xmlfile_sopen(const char *filename,
+                 cr_XmlFileType type,
+                 cr_CompressionType comtype,
+                 cr_ContentStat *stat,
+                 GError **err)
 {
     cr_XmlFile *f;
     GError *tmp_err = NULL;
@@ -60,7 +61,11 @@ cr_xmlfile_open(const char *filename,
         return NULL;
     }
 
-    CR_FILE *cr_f = cr_open(filename, CR_CW_MODE_WRITE, comtype, &tmp_err);
+    CR_FILE *cr_f = cr_open_with_stat(filename,
+                                      CR_CW_MODE_WRITE,
+                                      comtype,
+                                      stat,
+                                      &tmp_err);
     if (tmp_err) {
         g_propagate_prefixed_error(err, tmp_err, "Cannot open %s: ", filename);
         return NULL;
index 3842f39..6545cd2 100644 (file)
@@ -64,7 +64,10 @@ typedef struct {
  * @return              Opened cr_XmlFile or NULL on error
  */
 #define cr_xmlfile_open_primary(FILENAME, COMTYPE, ERR) \
-                cr_xmlfile_open(FILENAME, CR_XMLFILE_PRIMARY, COMTYPE, ERR)
+            cr_xmlfile_open(FILENAME, CR_XMLFILE_PRIMARY, COMTYPE, ERR)
+
+#define cr_xmlfile_sopen_primary(FILENAME, COMTYPE, STAT, ERR) \
+            cr_xmlfile_sopen(FILENAME, CR_XMLFILE_PRIMARY, COMTYPE, STAT,  ERR)
 
 /** Open a new filelists XML file.
  * @param FILENAME      Filename.
@@ -73,7 +76,10 @@ typedef struct {
  * @return              Opened cr_XmlFile or NULL on error
  */
 #define cr_xmlfile_open_filelists(FILENAME, COMTYPE, ERR) \
-                cr_xmlfile_open(FILENAME, CR_XMLFILE_FILELISTS, COMTYPE, ERR)
+            cr_xmlfile_open(FILENAME, CR_XMLFILE_FILELISTS, COMTYPE, ERR)
+
+#define cr_xmlfile_sopen_filelists(FILENAME, COMTYPE, STAT, ERR) \
+            cr_xmlfile_sopen(FILENAME, CR_XMLFILE_FILELISTS, COMTYPE, STAT, ERR)
 
 /** Open a new other XML file.
  * @param FILENAME      Filename.
@@ -82,7 +88,22 @@ typedef struct {
  * @return              Opened cr_XmlFile or NULL on error
  */
 #define cr_xmlfile_open_other(FILENAME, COMTYPE, ERR) \
-                cr_xmlfile_open(FILENAME, CR_XMLFILE_OTHER, COMTYPE, ERR)
+            cr_xmlfile_open(FILENAME, CR_XMLFILE_OTHER, COMTYPE, ERR)
+
+#define cr_xmlfile_sopen_other(FILENAME, COMTYPE, STAT, ERR) \
+            cr_xmlfile_open(FILENAME, CR_XMLFILE_OTHER, COMTYPE, STAT, ERR)
+
+/** Open a new XML file with stats.
+ * Note: Opened file must not exists! This function cannot
+ * open existing file!.
+ * @param filename      Filename.
+ * @param type          Type of XML file.
+ * @param comtype       Type of used compression.
+ * @param err           **GError
+ * @return              Opened cr_XmlFile or NULL on error
+ */
+#define cr_xmlfile_open(FILENAME, TYPE, COMTYPE, ERR) \
+            cr_xmlfile_sopen(FILENAME, TYPE, COMTYPE, NULL, ERR)
 
 /** Open a new XML file.
  * Note: Opened file must not exists! This function cannot
@@ -90,13 +111,15 @@ typedef struct {
  * @param filename      Filename.
  * @param type          Type of XML file.
  * @param comtype       Type of used compression.
+ * @param stat          pointer to cr_ContentStat or NULL
  * @param err           **GError
  * @return              Opened cr_XmlFile or NULL on error
  */
-cr_XmlFile *cr_xmlfile_open(const char *filename,
-                            cr_XmlFileType type,
-                            cr_CompressionType comtype,
-                            GError **err);
+cr_XmlFile *cr_xmlfile_sopen(const char *filename,
+                             cr_XmlFileType type,
+                             cr_CompressionType comtype,
+                             cr_ContentStat *stat,
+                             GError **err);
 
 /** Set total number of packages that will be in the file.
  * This number must be set before any write operation