]> git.ipfire.org Git - pakfire.git/commitdiff
archive: Simplify the walk/filter callbacks
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 21 Oct 2024 17:49:23 +0000 (17:49 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 21 Oct 2024 17:49:23 +0000 (17:49 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/archive.c
src/libpakfire/include/pakfire/archive.h

index d68100c28101d861162282b3982494c65b3058e5..5539d510928cef64351cc5967c5fa1016624723a 100644 (file)
@@ -282,7 +282,7 @@ static int pakfire_archive_walk(struct pakfire_archive* archive, struct archive*
 
                // Call the filter callback before we call the actual callback
                if (filter_callback) {
-                       r = filter_callback(archive->ctx, archive, a, entry, p);
+                       r = filter_callback(archive, entry, p);
 
                        // Handle the return code
                        switch (r) {
@@ -317,7 +317,7 @@ static int pakfire_archive_walk(struct pakfire_archive* archive, struct archive*
 
                // Run callback
                if (walk_callback) {
-                       r = walk_callback(archive->ctx, archive, a, entry, p);
+                       r = walk_callback(archive, a, entry, p);
 
                        // Handle the return code
                        switch (r) {
@@ -538,20 +538,20 @@ ERROR:
        return r;
 }
 
-static int __pakfire_archive_read_metadata(struct pakfire_ctx* ctx,
-               struct pakfire_archive* archive, struct archive* a, struct archive_entry* entry, void* p) {
+static int __pakfire_archive_read_metadata(struct pakfire_archive* archive,
+               struct archive* a, struct archive_entry* entry, void* p) {
        char* data = NULL;
        size_t length = 0;
        int r;
 
        const char* path = archive_entry_pathname(entry);
 
-       CTX_DEBUG(ctx, "Reading metadata file: %s\n", path);
+       CTX_DEBUG(archive->ctx, "Reading metadata file: %s\n", path);
 
        // Load the file into memory
        r = pakfire_archive_copy_data_to_buffer(archive, a, entry, &data, &length);
        if (r) {
-               CTX_ERROR(ctx, "Could not read data from archive: %s\n", archive_error_string(a));
+               CTX_ERROR(archive->ctx, "Could not read data from archive: %s\n", archive_error_string(a));
                goto ERROR;
        }
 
@@ -584,8 +584,8 @@ ERROR:
        return r;
 }
 
-static int __pakfire_archive_filter_metadata(struct pakfire_ctx* ctx,
-               struct pakfire_archive* archive, struct archive* a, struct archive_entry* entry, void* p) {
+static int __pakfire_archive_filter_metadata(struct pakfire_archive* archive,
+               struct archive_entry* entry, void* p) {
        const char* path = archive_entry_pathname(entry);
 
        // Format >= 6
@@ -764,8 +764,8 @@ static int64_t pakfire_archive_metadata_get_int64(
        return json_object_get_int64(object);
 }
 
-static int pakfire_archive_filter_payload(struct pakfire_ctx* ctx,
-               struct pakfire_archive* archive, struct archive* a, struct archive_entry* entry, void* p) {
+static int pakfire_archive_filter_payload(struct pakfire_archive* archive,
+               struct archive_entry* entry, void* p) {
        const char* path = archive_entry_pathname(entry);
        if (!path)
                return PAKFIRE_WALK_ERROR;
@@ -837,8 +837,8 @@ static cookie_io_functions_t pakfire_archive_read_functions = {
 };
 
 // Tries to find a matching file in the archive
-static int pakfire_archive_read_filter(struct pakfire_ctx* ctx,
-               struct pakfire_archive* archive, struct archive* a, struct archive_entry* e, void* data) {
+static int pakfire_archive_read_filter(struct pakfire_archive* archive,
+               struct archive_entry* e, void* data) {
        struct pakfire_archive_read_cookie* cookie = data;
        const char* symlink = NULL;
        int r;
@@ -871,7 +871,7 @@ static int pakfire_archive_read_filter(struct pakfire_ctx* ctx,
 
                        // Increment counter
                        if (++cookie->followed_symlinks >= MAX_FOLLOW_SYMLINKS) {
-                               CTX_ERROR(ctx, "Reached maximum number of symlinks to follow\n");
+                               CTX_ERROR(archive->ctx, "Reached maximum number of symlinks to follow\n");
                                return PAKFIRE_WALK_ERROR;
                        }
 
@@ -886,14 +886,14 @@ static int pakfire_archive_read_filter(struct pakfire_ctx* ctx,
 }
 
 // Reads a matching file into memory
-static int __pakfire_archive_read(struct pakfire_ctx* ctx,
-               struct pakfire_archive* archive, struct archive* a, struct archive_entry* e, void* data) {
+static int __pakfire_archive_read(struct pakfire_archive* archive,
+               struct archive* a, struct archive_entry* e, void* data) {
        struct pakfire_archive_read_cookie* cookie = data;
 
        // Create a file descriptor
        cookie->f = fopencookie(cookie, "r", pakfire_archive_read_functions);
        if (!cookie->f) {
-               CTX_ERROR(ctx, "Could not open /%s: %m\n", cookie->path);
+               CTX_ERROR(archive->ctx, "Could not open /%s: %m\n", cookie->path);
                return PAKFIRE_WALK_ERROR;
        }
 
@@ -1091,8 +1091,8 @@ static void pakfire_extract_progress(void* data) {
        pakfire_progress_update(state->archive->progress, position);
 }
 
-static int pakfire_archive_extract_one(struct pakfire_ctx* ctx,
-               struct pakfire_archive* archive, struct archive* a, struct archive_entry* entry, void* data) {
+static int pakfire_archive_extract_one(struct pakfire_archive* archive,
+               struct archive* a, struct archive_entry* entry, void* data) {
        struct pakfire_file* file = NULL;
        struct vfs_cap_data cap_data = {};
        char buffer[PATH_MAX];
@@ -1136,7 +1136,7 @@ static int pakfire_archive_extract_one(struct pakfire_ctx* ctx,
                // Compose file path
                r = pakfire_path_append(buffer, state->prefix, path);
                if (r < 0) {
-                       CTX_ERROR(ctx, "Could not compose file path: %m\n");
+                       CTX_ERROR(archive->ctx, "Could not compose file path: %m\n");
                        goto ERROR;
                }
 
@@ -1148,7 +1148,7 @@ static int pakfire_archive_extract_one(struct pakfire_ctx* ctx,
                if (link) {
                        r = pakfire_path_append(buffer, state->prefix, link);
                        if (r < 0) {
-                               CTX_ERROR(ctx, "Could not compose hardlink path: %m\n");
+                               CTX_ERROR(archive->ctx, "Could not compose hardlink path: %m\n");
                                goto ERROR;
                        }
 
@@ -1162,12 +1162,12 @@ static int pakfire_archive_extract_one(struct pakfire_ctx* ctx,
                path = archive_entry_pathname(entry);
 
                if (pakfire_path_exists(path)) {
-                       CTX_DEBUG(ctx, "The configuration file %s exists\n",
+                       CTX_DEBUG(archive->ctx, "The configuration file %s exists\n",
                                pakfire_file_get_path(file));
 
                        r = pakfire_string_format(buffer, "%s.paknew", path);
                        if (r < 0) {
-                               CTX_ERROR(ctx, "Could not compose path for configuration file: %m\n");
+                               CTX_ERROR(archive->ctx, "Could not compose path for configuration file: %m\n");
                                goto ERROR;
                        }
 
@@ -1181,7 +1181,7 @@ static int pakfire_archive_extract_one(struct pakfire_ctx* ctx,
                // Fetch path again since we changed it
                path = archive_entry_pathname(entry);
 
-               CTX_DEBUG(ctx, "Extracting %s\n", path);
+               CTX_DEBUG(archive->ctx, "Extracting %s\n", path);
 
                // Remove any extended attributes which we never write to disk
                archive_entry_xattr_clear(entry);
@@ -1205,14 +1205,14 @@ static int pakfire_archive_extract_one(struct pakfire_ctx* ctx,
                                break;
 
                        case ARCHIVE_WARN:
-                               CTX_ERROR(ctx, "%s\n", archive_error_string(state->writer));
+                               CTX_ERROR(archive->ctx, "%s\n", archive_error_string(state->writer));
 
                                // Pretend everything has been okay
                                r = 0;
                                break;
 
                        case ARCHIVE_FATAL:
-                               CTX_ERROR(ctx, "%s\n", archive_error_string(state->writer));
+                               CTX_ERROR(archive->ctx, "%s\n", archive_error_string(state->writer));
                                r = 1;
                                break;
                }
@@ -1758,8 +1758,8 @@ struct pakfire_scriptlet* pakfire_archive_get_scriptlet(
 /*
        systemd sysusers
 */
-static int pakfire_archive_filter_systemd_sysusers(struct pakfire_ctx* ctx,
-               struct pakfire_archive* archive, struct archive* a, struct archive_entry* e, void* data) {
+static int pakfire_archive_filter_systemd_sysusers(struct pakfire_archive* archive,
+               struct archive_entry* e, void* data) {
        const char* path = archive_entry_pathname(e);
 
        if (!pakfire_path_match("usr/lib/sysusers.d/*.conf", path))
@@ -1781,8 +1781,8 @@ static ssize_t pakfire_archive_stream_payload(
        return bytes_read;
 }
 
-static int pakfire_archive_handle_systemd_sysusers(struct pakfire_ctx* ctx,
-               struct pakfire_archive* archive, struct archive* a, struct archive_entry* e, void* data) {
+static int pakfire_archive_handle_systemd_sysusers(struct pakfire_archive* archive,
+               struct archive* a, struct archive_entry* e, void* data) {
        struct pakfire_jail* jail = NULL;
        char replace[PATH_MAX];
        int r;
index 4332a63ddaad155d7f1c10818814fe5f9c54415f..80f9d97bcd86a15aada623da0598e8e2b3971766 100644 (file)
@@ -67,10 +67,10 @@ int pakfire_archive_lint(struct pakfire_archive* archive,
 
 // Walk
 
-typedef int (*pakfire_archive_walk_callback)(struct pakfire_ctx* ctx,
-       struct pakfire_archive* archive, struct archive* a, struct archive_entry* e, void* p);
-typedef int (*pakfire_archive_walk_filter_callback)(struct pakfire_ctx* ctx,
-       struct pakfire_archive* archive, struct archive* a, struct archive_entry* e, void* p);
+typedef int (*pakfire_archive_walk_callback)(struct pakfire_archive* archive,
+       struct archive* a, struct archive_entry* e, void* p);
+typedef int (*pakfire_archive_walk_filter_callback)(struct pakfire_archive* archive,
+       struct archive_entry* e, void* p);
 
 enum pakfire_archive_walk_codes {
        PAKFIRE_WALK_OK    = 0,