]> git.ipfire.org Git - pakfire.git/commitdiff
jail: Move the main callback
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 26 Mar 2025 15:53:41 +0000 (15:53 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 26 Mar 2025 15:53:41 +0000 (15:53 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/pakfire/jail.c
src/pakfire/jail.h

index b13b8bba35e62c85180264f645f055ce7a64de19..8ad019ba386375672c0efacd7cd29b99cfcbdab8 100644 (file)
@@ -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);
 }
 
index 7e6ace2c5cf00823db54274352d63fb2323afd82..82defa99dcadf21a5c57c0d67de7c77b0af12ad1 100644 (file)
@@ -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);