From e1545ccbe31f3b56461929436d088738dc75aa28 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Thu, 30 Nov 2017 19:02:04 +0100 Subject: [PATCH] libpakfire: Move PakfireArchive type into archive.c Signed-off-by: Michael Tremer --- src/libpakfire/archive.c | 50 ++++++++++++++++++++---- src/libpakfire/include/pakfire/archive.h | 47 +++------------------- tests/libpakfire/archive.c | 2 + 3 files changed, 49 insertions(+), 50 deletions(-) diff --git a/src/libpakfire/archive.c b/src/libpakfire/archive.c index 02e2b2802..349f28633 100644 --- a/src/libpakfire/archive.c +++ b/src/libpakfire/archive.c @@ -44,6 +44,42 @@ #include #include +#define BLOCKSIZE 1024 * 1024 // 1MB + +typedef struct archive_checksum { + char* filename; + char* checksum; + archive_checksum_algo_t algo; +} archive_checksum_t; + +struct _PakfireArchive { + Pakfire pakfire; + char* path; + + // metadata + int format; + + PakfireFile filelist; + archive_checksum_t** checksums; + + // Signatures + PakfireArchiveSignature* signatures; + int signatures_loaded; + + int nrefs; +}; + +struct _PakfireArchiveSignature { + PakfireKey key; + char* sigdata; + int nrefs; +}; + +struct payload_archive_data { + struct archive* archive; + char buffer[BLOCKSIZE]; +}; + static void configure_archive(struct archive* a) { archive_read_support_filter_all(a); archive_read_support_format_all(a); @@ -53,7 +89,7 @@ static int archive_open(PakfireArchive archive, struct archive** a) { *a = archive_read_new(); configure_archive(*a); - if (archive_read_open_filename(*a, archive->path, PAKFIRE_ARCHIVE_BLOCKSIZE) == ARCHIVE_OK) { + if (archive_read_open_filename(*a, archive->path, BLOCKSIZE) == ARCHIVE_OK) { return 0; } @@ -73,11 +109,9 @@ static int archive_read(struct archive* a, void** data, size_t* data_size) { *data_size = 0; for (;;) { - *data = pakfire_realloc(*data, *data_size + PAKFIRE_ARCHIVE_BLOCKSIZE); - - ssize_t size = archive_read_data(a, *data + *data_size, - PAKFIRE_ARCHIVE_BLOCKSIZE); + *data = pakfire_realloc(*data, *data_size + BLOCKSIZE); + ssize_t size = archive_read_data(a, *data + *data_size, BLOCKSIZE); if (size == 0) break; @@ -291,10 +325,10 @@ PAKFIRE_EXPORT void pakfire_archive_unref(PakfireArchive archive) { static int pakfire_archive_parse_entry_format(PakfireArchive archive, struct archive* a, struct archive_entry* e) { - char format[PAKFIRE_ARCHIVE_FORMAT_SIZE + 1]; - format[PAKFIRE_ARCHIVE_FORMAT_SIZE] = '\0'; + char format[10]; + format[sizeof(*format)] = '\0'; - archive_read_data(a, &format, PAKFIRE_ARCHIVE_FORMAT_SIZE); + archive_read_data(a, &format, sizeof(*format)); archive->format = atoi(format); DEBUG("Archive at %p format is %d\n", archive, archive->format); diff --git a/src/libpakfire/include/pakfire/archive.h b/src/libpakfire/include/pakfire/archive.h index 90c31a985..5de8a2877 100644 --- a/src/libpakfire/include/pakfire/archive.h +++ b/src/libpakfire/include/pakfire/archive.h @@ -21,7 +21,7 @@ #ifndef PAKFIRE_ARCHIVE_H #define PAKFIRE_ARCHIVE_H -#include +#include #include @@ -34,6 +34,10 @@ typedef enum pakfire_archive_verify_status { PAKFIRE_ARCHIVE_VERIFY_ERROR, } pakfire_archive_verify_status_t; +typedef enum pakfire_archive_flags { + PAKFIRE_ARCHIVE_USE_PAYLOAD = 1 << 0, +} pakfire_archive_flags_t; + PakfireArchive pakfire_archive_create(Pakfire pakfire); PakfireArchive pakfire_archive_ref(PakfireArchive archive); void pakfire_archive_unref(PakfireArchive archive); @@ -60,10 +64,6 @@ PakfireArchiveSignature pakfire_archive_signature_ref(PakfireArchiveSignature si void pakfire_archive_signature_unref(PakfireArchiveSignature signature); const char* pakfire_archive_signature_get_data(PakfireArchiveSignature signature); -enum pakfire_archive_flags { - PAKFIRE_ARCHIVE_USE_PAYLOAD = 1 << 0, -}; - #define PAKFIRE_ARCHIVE_FN_CHECKSUMS "chksums" #define PAKFIRE_ARCHIVE_FN_FILELIST "filelist" #define PAKFIRE_ARCHIVE_FN_FORMAT "pakfire-format" @@ -73,48 +73,11 @@ enum pakfire_archive_flags { #ifdef PAKFIRE_PRIVATE -#define PAKFIRE_ARCHIVE_BLOCKSIZE 10240 -#define PAKFIRE_ARCHIVE_FORMAT_SIZE 5 - typedef enum archive_checksum_algo { PAKFIRE_CHECKSUM_UNKNOWN = 0, PAKFIRE_CHECKSUM_SHA512, } archive_checksum_algo_t; -typedef struct archive_checksum { - char* filename; - char* checksum; - archive_checksum_algo_t algo; -} archive_checksum_t; - -struct _PakfireArchive { - Pakfire pakfire; - char* path; - - // metadata - int format; - - PakfireFile filelist; - archive_checksum_t** checksums; - - // Signatures - PakfireArchiveSignature* signatures; - int signatures_loaded; - - int nrefs; -}; - -struct _PakfireArchiveSignature { - PakfireKey key; - char* sigdata; - int nrefs; -}; - -struct payload_archive_data { - struct archive* archive; - char buffer[PAKFIRE_ARCHIVE_BLOCKSIZE]; -}; - #endif #endif /* PAKFIRE_ARCHIVE_H */ diff --git a/tests/libpakfire/archive.c b/tests/libpakfire/archive.c index 08918dca7..103f3630d 100644 --- a/tests/libpakfire/archive.c +++ b/tests/libpakfire/archive.c @@ -18,6 +18,8 @@ # # #############################################################################*/ +#include + #include #include -- 2.39.5