From 9f7516724eb0b258a6dab39dcaea2c082ed5f370 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 17 Jul 2022 13:31:28 +0100 Subject: [PATCH 1/1] prefork-interp: wip args Signed-off-by: Ian Jackson --- cprogs/prefork-interp.c | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/cprogs/prefork-interp.c b/cprogs/prefork-interp.c index 29d39fe..de2b6f1 100644 --- a/cprogs/prefork-interp.c +++ b/cprogs/prefork-interp.c @@ -353,8 +353,34 @@ static int connect_or_spawn(void) { return fake_pair[0]; } -int main(int argc, const char *const *argv) { - script = process_opts(argc, argv); +static void make_executor_argv(const char *const *argv) { + #define EACH_NEW_ARGV(EACH) { \ + if ((arg = interp)) { EACH; } \ + if ((arg = script)) { EACH; } \ + const char *const *walk = argv; \ + while ((arg = *walk++)) { EACH; } \ + } + + size_t count = 1; + MAKE_NEW_ARGV( count++ ); + + executor_argv = calloc(count, sizeof(char*)); + if (!executor_argv) diee("allocate for arguments"); + + char **out = executor_argv; + MAKE_NEW_ARGV( *out++ = arg ); + *out++ = 0; +} + +int main(int argc_unused, const char *const *argv) { + process_opts(&argv); + + // Now we have + // - possibly interp + // - possibly script + // - remaining args + // which ought to be passed on to the actual executor. + make_new_argv(argv); find_socket_path(); FILLZERO(sun); -- 2.30.2