]> git.ipfire.org Git - pakfire.git/commitdiff
archive: Rename files inside the archive (again)
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 20 May 2022 15:54:49 +0000 (15:54 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 20 May 2022 15:54:49 +0000 (15:54 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/archive.c
src/libpakfire/packager.c

index e2c6b53a0f84d786727be9252ff2578e365173ca..4775355c85a0a330ff6c20f6f7090f3814d0a7ad 100644 (file)
@@ -102,6 +102,32 @@ struct pakfire_archive {
        int verify;
 };
 
+static const char* pakfire_archive_legacy_filename(
+               struct pakfire_archive* archive, const char* filename) {
+       // Do nothing for new package formats
+       if (archive->format >= 6)
+               return filename;
+
+       const struct files {
+               const char* file;
+               const char* legacy;
+       } filenames[] = {
+               { "CHKSUMS",  "chksums" },
+               { "DATA",     "data.img" },
+               { "FILELIST", "filelist"},
+               { "PKGINFO",  "info" },
+               { NULL, NULL },
+       };
+
+       for (const struct files* f = filenames; f->file; f++) {
+               if (strcmp(f->file, filename) == 0)
+                       return f->legacy;
+       }
+
+       // Nothing found
+       return filename;
+}
+
 /*
        A helper function to close the archive and reset our data structures
 */
@@ -232,6 +258,9 @@ static int open_archive_and_find(struct pakfire_archive* archive, struct archive
        if (r)
                return r;
 
+       // Fix filename
+       filename = pakfire_archive_legacy_filename(archive, filename);
+
        r = find_archive_entry(archive, entry, *a, filename);
 
        // Close archive on error
@@ -296,7 +325,7 @@ static struct archive* pakfire_archive_open_payload(struct pakfire_archive* arch
        struct archive_entry* entry = NULL;
 
        // Find the payload
-       int r = open_archive_and_find(archive, a, &entry, "data.img");
+       int r = open_archive_and_find(archive, a, &entry, "DATA");
        if (r)
                return NULL;
 
@@ -537,7 +566,7 @@ static int pakfire_archive_parse_legacy_metadata(struct pakfire_archive* archive
                return 0;
 
        // Read the metadata file
-       int r = open_archive_and_read(archive, "info", &data, &size);
+       int r = open_archive_and_read(archive, "PKGINFO", &data, &size);
        if (r)
                return r;
 
@@ -1033,7 +1062,7 @@ static int pakfire_archive_load_filelist_mtree(struct pakfire_archive* archive)
        int r;
 
        // Find filelist
-       r = open_archive_and_find(archive, &a, &entry, "filelist");
+       r = open_archive_and_find(archive, &a, &entry, "FILELIST");
        if (r) {
                // Ignore if filelist doesn't exist
                if (errno == ENOENT)
@@ -1116,7 +1145,7 @@ static int pakfire_archive_load_filelist_legacy(struct pakfire_archive* archive)
        size_t size;
 
        // Read filelist
-       int r = open_archive_and_read(archive, "filelist", &data, &size);
+       int r = open_archive_and_read(archive, "FILELIST", &data, &size);
        if (r) {
                if (errno == ENOENT)
                        return 0;
@@ -1169,7 +1198,7 @@ static int pakfire_archive_load_checksums_mtree(struct pakfire_archive* archive)
        int r;
 
        // Find chksums
-       r = open_archive_and_find(archive, &a, &entry, "chksums");
+       r = open_archive_and_find(archive, &a, &entry, "FILELIST");
        if (r)
                return r;
 
@@ -1305,7 +1334,7 @@ static int pakfire_archive_load_checksums_legacy(struct pakfire_archive* archive
        size_t length = 0;
 
        // Find chksums
-       int r = open_archive_and_read(archive, "chksums", &buffer, &length);
+       int r = open_archive_and_read(archive, "CHKSUMS", &buffer, &length);
        if (r)
                return r;
 
index c88a393e7753067dc9ae6992e9337293b27220be..5f7549f06d762bdf86dc7cfab86985d24a38abd0 100644 (file)
@@ -696,7 +696,7 @@ int pakfire_packager_finish(struct pakfire_packager* packager, FILE* f) {
 
        // Write the filelist in mtree format
        if (packager->files) {
-               r = pakfire_packager_write_archive(packager, a, mtree, "filelist",
+               r = pakfire_packager_write_archive(packager, a, mtree, "FILELIST",
                        &packager->mtree, packager->fmtree);
                if (r) {
                        ERROR(packager->pakfire, "Could not add filelist to archive: %s\n",
@@ -705,7 +705,7 @@ int pakfire_packager_finish(struct pakfire_packager* packager, FILE* f) {
                }
 
                // Write the payload
-               r = pakfire_packager_write_archive(packager, a, mtree, "data.img",
+               r = pakfire_packager_write_archive(packager, a, mtree, "DATA",
                        &packager->payload, packager->fpayload);
                if (r) {
                        ERROR(packager->pakfire, "Could not add payload to archive: %s\n",
@@ -732,7 +732,7 @@ int pakfire_packager_finish(struct pakfire_packager* packager, FILE* f) {
        }
 
        // Write checksums
-       r = pakfire_packager_write_archive(packager, a, NULL, "chksums", &mtree, fmtree);
+       r = pakfire_packager_write_archive(packager, a, NULL, "CHKSUMS", &mtree, fmtree);
        if (r) {
                ERROR(packager->pakfire, "Could not add checksums to archive: %s\n",
                        archive_error_string(a));