From: Michael Tremer Date: Tue, 19 Dec 2023 18:08:50 +0000 (+0000) Subject: jail: Add functions to set standard input/output callbacks X-Git-Tag: 0.9.30~1260 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d8b94dd5eebcc9bab6a379bc84ec89dcec85b32b;p=pakfire.git jail: Add functions to set standard input/output callbacks Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/include/pakfire/jail.h b/src/libpakfire/include/pakfire/jail.h index 6185d2016..e320d6f79 100644 --- a/src/libpakfire/include/pakfire/jail.h +++ b/src/libpakfire/include/pakfire/jail.h @@ -45,6 +45,18 @@ const char* pakfire_jail_get_env(struct pakfire_jail* jail, const char* key); int pakfire_jail_set_env(struct pakfire_jail* jail, const char* key, const char* value); int pakfire_jail_import_env(struct pakfire_jail* jail, const char* env[]); +// Standard Input +typedef int (*pakfire_jail_stdin_callback) + (struct pakfire_jail* jail, void* data, int fd); +void pakfire_jail_set_stdin_callback(struct pakfire_jail* jail, + pakfire_jail_stdin_callback callback, void* data); + +// Standard Output +typedef int (*pakfire_jail_stdout_callback) + (struct pakfire_jail* jail, void* data, const char* line, const size_t length); +void pakfire_jail_set_stdout_callback(struct pakfire_jail* jail, + pakfire_jail_stdout_callback callback, void* data); + // Execute typedef int (*pakfire_jail_communicate_in) (struct pakfire* pakfire, void* data, int fd); diff --git a/src/libpakfire/jail.c b/src/libpakfire/jail.c index 884d2c4a9..9433f9251 100644 --- a/src/libpakfire/jail.c +++ b/src/libpakfire/jail.c @@ -136,6 +136,20 @@ struct pakfire_jail { // Environment char* env[ENVIRON_SIZE]; + struct pakfire_jail_callbacks { + // Standard Input + struct pakfire_jail_callbacks_stdin { + pakfire_jail_stdin_callback callback; + void* data; + } stdin; + + // Standard Output + struct pakfire_jail_callbacks_stdout { + pakfire_jail_stdout_callback callback; + void* data; + } stdout; + } callbacks; + // Mountpoints struct pakfire_jail_mountpoint mountpoints[MAX_MOUNTPOINTS]; unsigned int num_mountpoints; @@ -536,6 +550,24 @@ ERROR: return -1; } +/* + Standard Input +*/ +PAKFIRE_EXPORT void pakfire_jail_set_stdin_callback(struct pakfire_jail* jail, + pakfire_jail_stdin_callback callback, void* data) { + jail->callbacks.stdin.callback = callback; + jail->callbacks.stdin.data = data; +} + +/* + Standard Output +*/ +PAKFIRE_EXPORT void pakfire_jail_set_stdout_callback(struct pakfire_jail* jail, + pakfire_jail_stdout_callback callback, void* data) { + jail->callbacks.stdout.callback = callback; + jail->callbacks.stdout.data = data; +} + /* This function replaces any logging in the child process. diff --git a/src/libpakfire/libpakfire.sym b/src/libpakfire/libpakfire.sym index 6083a70e6..425f20f56 100644 --- a/src/libpakfire/libpakfire.sym +++ b/src/libpakfire/libpakfire.sym @@ -181,6 +181,8 @@ global: pakfire_jail_nice; pakfire_jail_ref; pakfire_jail_set_env; + pakfire_jail_set_stdin_callback; + pakfire_jail_set_stdout_callback; pakfire_jail_set_timeout; pakfire_jail_unref;