From cdff716d970e6e4645d3797cd6678d574afac4e7 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 26 Mar 2025 15:53:41 +0000 Subject: [PATCH] jail: Move the main callback Signed-off-by: Michael Tremer --- src/pakfire/jail.c | 24 +++++++++++++----------- src/pakfire/jail.h | 4 ++-- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/pakfire/jail.c b/src/pakfire/jail.c index b13b8bba..8ad019ba 100644 --- a/src/pakfire/jail.c +++ b/src/pakfire/jail.c @@ -163,12 +163,12 @@ struct pakfire_jail_exec { struct pakfire_cgroup* cgroup; struct pakfire_cgroup_stats cgroup_stats; - // The function to be called once the jail has been set up - pakfire_jail_callback callback; - void* data; - // Callbacks struct pakfire_jail_exec_callbacks { + // Main + pakfire_jail_main_callback main; + void* main_data; + // Input pakfire_jail_input_callback input; void* input_data; @@ -1706,18 +1706,18 @@ static int pakfire_jail_child(struct pakfire_jail* jail, struct pakfire_jail_exe DEBUG(jail->ctx, "Child process initialization done\n"); // Check if we have a callback - if (!ctx->callback) { + if (unlikely(!ctx->callbacks.main)) { ERROR(jail->ctx, "No callback set\n"); return 126; } // Call the callback - return ctx->callback(jail->ctx, ctx->data); + return ctx->callbacks.main(jail->ctx, ctx->callbacks.main_data); } // Run a command in the jail static int __pakfire_jail_exec(struct pakfire_jail* jail, - pakfire_jail_callback callback, void* data, int flags, + pakfire_jail_main_callback callback, void* data, int flags, pakfire_jail_input_callback input_callback, void* input_data, pakfire_jail_output_callback output_callback, void* output_data, char** output, size_t* output_length) { @@ -1735,9 +1735,11 @@ static int __pakfire_jail_exec(struct pakfire_jail* jail, .flags = flags, .pidfd = -EBADF, - // Callback & Data - .callback = callback, - .data = data, + // Main Callback & Data + .callbacks = { + .main = callback, + .main_data = data, + }, // Pipes .pipes = { @@ -2037,7 +2039,7 @@ ERROR: } int pakfire_jail_exec(struct pakfire_jail* jail, - pakfire_jail_callback callback, void* data, int flags) { + pakfire_jail_main_callback callback, void* data, int flags) { return __pakfire_jail_exec(jail, callback, data, flags, NULL, NULL, NULL, NULL, NULL, NULL); } diff --git a/src/pakfire/jail.h b/src/pakfire/jail.h index 7e6ace2c..82defa99 100644 --- a/src/pakfire/jail.h +++ b/src/pakfire/jail.h @@ -55,7 +55,7 @@ int pakfire_jail_nice(struct pakfire_jail* jail, int nice); // Timeout int pakfire_jail_set_timeout(struct pakfire_jail* jail, unsigned int timeout); -typedef int (*pakfire_jail_callback)(struct pakfire_ctx* ctx, void* data); +typedef int (*pakfire_jail_main_callback)(struct pakfire_ctx* ctx, void* data); enum pakfire_jail_exec_flags { PAKFIRE_JAIL_INTERACTIVE = (1 << 0), @@ -65,7 +65,7 @@ enum pakfire_jail_exec_flags { }; int pakfire_jail_exec(struct pakfire_jail* jail, - pakfire_jail_callback callback, void* data, int flags); + pakfire_jail_main_callback callback, void* data, int flags); int pakfire_jail_exec_command(struct pakfire_jail* jail, const char* argv[], struct pakfire_env* env, int flags); -- 2.39.5