]> git.ipfire.org Git - pakfire.git/commitdiff
archive: Move data copying to buffer function to util
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 7 Apr 2021 11:17:58 +0000 (11:17 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 7 Apr 2021 11:17:58 +0000 (11:17 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/archive.c
src/libpakfire/include/pakfire/util.h
src/libpakfire/util.c

index 03e87d4194394483853c289026e3daca09a8e9b4..ed34925d7c68dbf95af581ca0a6d90bdfb0b1e9a 100644 (file)
@@ -113,32 +113,6 @@ static int archive_open(PakfireArchive archive, struct archive** a) {
        return 0;
 }
 
-static int archive_read_to_buffer(Pakfire pakfire, struct archive* a,
-               struct archive_entry* entry, char** data, size_t* data_size) {
-       *data = NULL;
-       *data_size = 0;
-
-       size_t required_size = archive_entry_size(entry);
-       if (!required_size)
-               return 0;
-
-       // Allocate a block of the required size
-       *data = malloc(required_size);
-       if (!*data)
-               return ENOMEM;
-
-       ssize_t bytes_read = archive_read_data(a, *data, required_size);
-       if (bytes_read < 0) {
-               ERROR(pakfire, "Could not read from archive: %s\n", archive_error_string(a));
-               free(*data);
-               return 1;
-       }
-
-       *data_size = bytes_read;
-
-       return 0;
-}
-
 static int find_archive_entry(struct archive_entry** entry, struct archive* a, const char* filename) {
        int r;
 
@@ -438,7 +412,7 @@ static int pakfire_archive_parse_entry_format(PakfireArchive archive,
        char format[10];
        size_t size = sizeof(format);
 
-       archive_read_to_buffer(archive->pakfire, a, e, (char**)&format, &size);
+       pakfire_archive_copy_data_to_buffer(archive->pakfire, a, e, (char**)&format, &size);
        archive->format = atoi(format);
 
        DEBUG(archive->pakfire, "Archive at %p format is %d\n",
@@ -452,7 +426,7 @@ static int pakfire_archive_parse_entry_metadata(PakfireArchive archive,
        char* data;
        size_t data_size;
 
-       int r = archive_read_to_buffer(archive->pakfire, a, e, &data, &data_size);
+       int r = pakfire_archive_copy_data_to_buffer(archive->pakfire, a, e, &data, &data_size);
        if (r)
                return r;
 
@@ -468,7 +442,7 @@ static int pakfire_archive_parse_entry_filelist(PakfireArchive archive,
        char* data;
        size_t data_size;
 
-       int r = archive_read_to_buffer(archive->pakfire, a, e, &data, &data_size);
+       int r = pakfire_archive_copy_data_to_buffer(archive->pakfire, a, e, &data, &data_size);
        if (r) {
                return 1;
        }
@@ -491,7 +465,7 @@ static int pakfire_archive_parse_entry_checksums(PakfireArchive archive,
        char* data;
        size_t data_size;
 
-       int r = archive_read_to_buffer(archive->pakfire, a, e, &data, &data_size);
+       int r = pakfire_archive_copy_data_to_buffer(archive->pakfire, a, e, &data, &data_size);
        if (r)
                return 1;
 
@@ -560,7 +534,8 @@ static int pakfire_archive_parse_entry_scriptlet(PakfireArchive archive,
        // Set the type
        scriptlet->type = pakfire_scriptlet_type_from_filename(filename);
 
-       int r = archive_read_to_buffer(archive->pakfire, a, e, &scriptlet->data, &scriptlet->size);
+       int r = pakfire_archive_copy_data_to_buffer(archive->pakfire, a, e,
+               &scriptlet->data, &scriptlet->size);
        if (r)
                return r;
 
@@ -822,7 +797,7 @@ PAKFIRE_EXPORT int pakfire_archive_read(PakfireArchive archive, const char* file
                goto out;
        }
 
-       r = archive_read_to_buffer(archive->pakfire, use_payload ? pa : a, entry,
+       r = pakfire_archive_copy_data_to_buffer(archive->pakfire, use_payload ? pa : a, entry,
                data, data_size);
 
 out:
@@ -911,7 +886,7 @@ static int pakfire_archive_parse_entry_signature(PakfireArchive archive,
        char* data;
        size_t data_size;
 
-       int r = archive_read_to_buffer(archive->pakfire, a, e, &data, &data_size);
+       int r = pakfire_archive_copy_data_to_buffer(archive->pakfire, a, e, &data, &data_size);
        if (r)
                return 1;
 
@@ -1381,7 +1356,8 @@ PAKFIRE_EXPORT PakfirePackage pakfire_archive_make_package(PakfireArchive archiv
        }
 
        // Import filelist
-       pakfire_package_set_filelist(pkg, archive->filelist);
+       if (archive->filelist)
+               pakfire_package_set_filelist(pkg, archive->filelist);
 
        return pkg;
 
index 9e6c2d44b5362ee90c5b94302226934062537681..e30760a583eb0f021636c92ef759b52edb550456 100644 (file)
@@ -76,6 +76,8 @@ int pakfire_rmtree(const char* path, int flags);
 
 int pakfire_archive_copy_data(struct archive* src, struct archive* dst,
        struct archive_entry* entry);
+int pakfire_archive_copy_data_to_buffer(Pakfire pakfire, struct archive* a,
+       struct archive_entry* entry, char** data, size_t* data_size);
 
 // JSON Stuff
 
index e80520b69550b709d22388a861b5e51c58ac8b1b..3b437ac02927902f3bf5c42d48eb87512731b05e 100644 (file)
@@ -34,6 +34,7 @@
 #include <unistd.h>
 
 #include <archive.h>
+#include <archive_entry.h>
 #include <json.h>
 #include <uuid/uuid.h>
 
@@ -579,6 +580,32 @@ int pakfire_archive_copy_data(struct archive* src, struct archive* dst,
        }
 }
 
+int pakfire_archive_copy_data_to_buffer(Pakfire pakfire, struct archive* a,
+               struct archive_entry* entry, char** data, size_t* data_size) {
+       *data = NULL;
+       *data_size = 0;
+
+       size_t required_size = archive_entry_size(entry);
+       if (!required_size)
+               return 0;
+
+       // Allocate a block of the required size
+       *data = malloc(required_size);
+       if (!*data)
+               return ENOMEM;
+
+       ssize_t bytes_read = archive_read_data(a, *data, required_size);
+       if (bytes_read < 0) {
+               ERROR(pakfire, "Could not read from archive: %s\n", archive_error_string(a));
+               free(*data);
+               return 1;
+       }
+
+       *data_size = bytes_read;
+
+       return 0;
+}
+
 // JSON Stuff
 
 static struct json_object* pakfire_json_parse(Pakfire pakfire, FILE* f) {