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;
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) {
.flags = flags,
.pidfd = -EBADF,
- // Callback & Data
- .callback = callback,
- .data = data,
+ // Main Callback & Data
+ .callbacks = {
+ .main = callback,
+ .main_data = data,
+ },
// Pipes
.pipes = {
}
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);
}
// 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),
};
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);