From: Michael Tremer Date: Wed, 7 Apr 2021 11:17:58 +0000 (+0000) Subject: archive: Move data copying to buffer function to util X-Git-Tag: 0.9.28~1285^2~408 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=53f5745ea181cf9f7394c03b6164d104cf31ed7a;p=pakfire.git archive: Move data copying to buffer function to util Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/archive.c b/src/libpakfire/archive.c index 03e87d419..ed34925d7 100644 --- a/src/libpakfire/archive.c +++ b/src/libpakfire/archive.c @@ -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; diff --git a/src/libpakfire/include/pakfire/util.h b/src/libpakfire/include/pakfire/util.h index 9e6c2d44b..e30760a58 100644 --- a/src/libpakfire/include/pakfire/util.h +++ b/src/libpakfire/include/pakfire/util.h @@ -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 diff --git a/src/libpakfire/util.c b/src/libpakfire/util.c index e80520b69..3b437ac02 100644 --- a/src/libpakfire/util.c +++ b/src/libpakfire/util.c @@ -34,6 +34,7 @@ #include #include +#include #include #include @@ -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) {