return r;
}
+static int pakfire_archive_walk_entries(struct pakfire_archive* archive, struct archive* a,
+ int (*callback)(struct pakfire_archive* archive, struct archive* a, struct archive_entry* e, void* data),
+ void* data, off_t* offset) {
+ struct archive_entry* e = NULL;
+
+ // Walk through the archive
+ while (1) {
+ int r = archive_read_next_header(a, &e);
+
+ // Return OK when we reached the end of the archive
+ if (r == ARCHIVE_EOF) {
+ if (offset)
+ *offset = archive_read_header_position(a);
+
+ return ARCHIVE_OK;
+ }
+
+ // Raise any other errors
+ else if (r)
+ return r;
+
+ // Run callback
+ if (callback) {
+ r = callback(archive, a, e, data);
+ if (r)
+ return r;
+ }
+ }
+
+ return 0;
+}
+
+static int pakfire_archive_walk(struct pakfire_archive* archive,
+ int (*callback)(struct pakfire_archive* archive, struct archive* a, struct archive_entry* e, void* data),
+ void* data, off_t* offset) {
+ struct archive* a;
+
+ // Open the archive file
+ int r = open_archive(archive, &a);
+ if (r)
+ return r;
+
+ // Walk through the archive
+ r = pakfire_archive_walk_entries(archive, a, callback, data, offset);
+
+ // Close the archive
+ close_archive(archive, a);
+
+ return r;
+}
+
static int find_archive_entry(struct archive_entry** entry, struct archive* a, const char* filename) {
int r;
return r;
}
+/*
+ This function finds the end of the archive so that we can append more files
+*/
+static off_t pakfire_archive_find_end(struct pakfire_archive* archive, off_t* offset) {
+ return pakfire_archive_walk(archive, NULL, NULL, offset);
+}
+
static la_ssize_t pakfire_archive_read_callback(struct archive* a,
void* client_data, const void** buffer) {
struct archive* archive = (struct archive*)client_data;
return r;
}
-static int pakfire_archive_walk_entries(struct pakfire_archive* archive, struct archive* a,
- int (*callback)(struct pakfire_archive* archive, struct archive* a, struct archive_entry* e, void* data),
- void* data) {
- struct archive_entry* e = NULL;
-
- // Walk through the archive
- while (1) {
- int r = archive_read_next_header(a, &e);
-
- // Return OK when we reached the end of the archive
- if (r == ARCHIVE_EOF)
- return ARCHIVE_OK;
-
- // Raise any other errors
- else if (r)
- return r;
-
- // Run callback
- r = callback(archive, a, e, data);
- if (r)
- return r;
- }
-
- return 0;
-}
-
-static int pakfire_archive_walk(struct pakfire_archive* archive,
- int (*callback)(struct pakfire_archive* archive, struct archive* a, struct archive_entry* e, void* data),
- void* data) {
- struct archive* a;
-
- // Open the archive file
- int r = open_archive(archive, &a);
- if (r)
- return r;
-
- // Walk through the archive
- r = pakfire_archive_walk_entries(archive, a, callback, data);
-
- // Close the archive
- close_archive(archive, a);
-
- return r;
-}
-
static int pakfire_archive_read_metadata_entry(struct pakfire_archive* archive, struct archive* a,
struct archive_entry* e, void* data) {
int ret;
}
static int pakfire_archive_read_metadata(struct pakfire_archive* archive, struct archive* a) {
- return pakfire_archive_walk(archive, pakfire_archive_read_metadata_entry, NULL);
+ return pakfire_archive_walk(archive, pakfire_archive_read_metadata_entry, NULL, NULL);
}
/*
// Extract everything
r = pakfire_archive_walk_entries(archive, payload,
- pakfire_archive_extract_entry, &extractor);
+ pakfire_archive_extract_entry, &extractor, NULL);
ERROR:
// Finish progressbar
archive->verify = PAKFIRE_ARCHIVE_VERIFY_NOT_SIGNED;
// Verify all signatures
- r = pakfire_archive_walk(archive, pakfire_archive_verify_signature, &checksums);
+ r = pakfire_archive_walk(archive, pakfire_archive_verify_signature, &checksums, NULL);
ERROR:
gpgme_data_release(checksums);