]> git.ipfire.org Git - pakfire.git/commitdiff
packager: Copy file payload into mtree for hashing
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 17 Jul 2022 10:00:05 +0000 (10:00 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 17 Jul 2022 10:00:05 +0000 (10:00 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/packager.c

index 7d59575a4ac0779b3cdcca9d98c00ec1272ab49e..cf7e0168b4eddc7e9a5eaae3f414c15b9e9c1497 100644 (file)
@@ -886,6 +886,14 @@ int pakfire_packager_add(struct pakfire_packager* packager,
                archive_entry_set_gid(entry, 0);
        }
 
+       // Open the source file
+       f = fopen(sourcepath, "r");
+       if (!f) {
+               ERROR(packager->pakfire, "Could not open %s: %m\n", sourcepath);
+               r = errno;
+               goto ERROR;
+       }
+
        // Write the header
        r = archive_write_header(packager->payload, entry);
        if (r) {
@@ -894,20 +902,6 @@ int pakfire_packager_add(struct pakfire_packager* packager,
                goto ERROR;
        }
 
-       // Copy the data of regular files
-       if (archive_entry_filetype(entry) == AE_IFREG) {
-               f = fopen(sourcepath, "r");
-               if (!f) {
-                       ERROR(packager->pakfire, "Could not open %s: %m\n", sourcepath);
-                       r = errno;
-                       goto ERROR;
-               }
-
-               r = pakfire_packager_copy_data(packager, packager->payload, f);
-               if (r)
-                       goto ERROR;
-       }
-
        // Write to mtree
        r = archive_write_header(packager->mtree, entry);
        if (r) {
@@ -916,6 +910,19 @@ int pakfire_packager_add(struct pakfire_packager* packager,
                goto ERROR;
        }
 
+       // Copy the data of regular files
+       if (archive_entry_filetype(entry) == AE_IFREG) {
+               // Copy the payload into the archive
+               r = pakfire_packager_copy_data(packager, packager->payload, f);
+               if (r)
+                       goto ERROR;
+
+               // Copy the payload into the mtree for hashing
+               r = pakfire_packager_copy_data(packager, packager->mtree, f);
+               if (r)
+                       goto ERROR;
+       }
+
        // Increment installsize
        packager->installsize += archive_entry_size(entry);