]> git.ipfire.org Git - pakfire.git/commitdiff
libpakfire: Move PakfireArchive type into archive.c
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 30 Nov 2017 18:02:04 +0000 (19:02 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 30 Nov 2017 18:02:04 +0000 (19:02 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/archive.c
src/libpakfire/include/pakfire/archive.h
tests/libpakfire/archive.c

index 02e2b2802d94710adf95f701b809453eed02ffea..349f286331c9268eef15fad8183681ee9311ce6a 100644 (file)
 #include <pakfire/private.h>
 #include <pakfire/util.h>
 
+#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);
index 90c31a985a5ae58b68ab57c6579d211851eccf28..5de8a2877b13f0e4975770011e72b946c2c30cbe 100644 (file)
@@ -21,7 +21,7 @@
 #ifndef PAKFIRE_ARCHIVE_H
 #define PAKFIRE_ARCHIVE_H
 
-#include <archive.h>
+#include <stddef.h>
 
 #include <pakfire/types.h>
 
@@ -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 */
index 08918dca72e9124fb25d3a76c4e184511a1d27f9..103f3630d9715b9b5e5d2f76177685a7a50d5219 100644 (file)
@@ -18,6 +18,8 @@
 #                                                                             #
 #############################################################################*/
 
+#include <unistd.h>
+
 #include <pakfire/archive.h>
 #include <pakfire/util.h>