From f1a89f120f3f72684544906bb4852414ac0171bb Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 17 Jul 2022 12:51:47 +0100 Subject: [PATCH] prefork: Have process_opts update argv and not take argc This will let us do further option processing after process_opts. Signed-off-by: Ian Jackson --- cprogs/cgi-fcgi-interp.c | 4 ++-- cprogs/prefork.c | 14 +++++++------- cprogs/prefork.h | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/cprogs/cgi-fcgi-interp.c b/cprogs/cgi-fcgi-interp.c index 6714134..da1c2fa 100644 --- a/cprogs/cgi-fcgi-interp.c +++ b/cprogs/cgi-fcgi-interp.c @@ -174,7 +174,7 @@ static void queue_alarm(void); static void start_logging(void); static void await_something(void); -int main(int argc, const char *const *argv) { +int main(int unused_argc, const char *const *argv) { int r; stage2 = getenv(STAGE2_VAR); @@ -194,7 +194,7 @@ int main(int argc, const char *const *argv) { if (r) diee("close saved stderr fd"); } - script = process_opts(argc, argv); + script = process_opts(&argv); if (!stage2) { diff --git a/cprogs/prefork.c b/cprogs/prefork.c index f306ffc..607cdb7 100644 --- a/cprogs/prefork.c +++ b/cprogs/prefork.c @@ -302,20 +302,20 @@ static void shbang_opts(const char *const **argv_io, if (!interp) badusage("need interpreter argument"); } -const char *process_opts(int argc, const char *const *argv) { +const char *process_opts(const char *const **argv_io) { const char *smashedopt; sha256_init(&identsc); - if (argc>=2 && - (smashedopt = argv[1]) && + if ((*argv_io)[0] && + (smashedopt = (*argv_io)[1]) && smashedopt[0]=='-' && (strchr(smashedopt,' ') || strchr(smashedopt,','))) { /* single argument containg all the options and */ - argv += 2; /* eat argv[0] and smashedopt */ + *argv_io += 2; /* eat argv[0] and smashedopt */ const char *split_args[MAX_OPTS+1]; int split_argc = 0; - split_args[split_argc++] = argv[0]; + split_args[split_argc++] = (*argv_io)[0]; for (;;) { if (split_argc >= MAX_OPTS) die("too many options in combined arg"); split_args[split_argc++] = smashedopt; @@ -335,10 +335,10 @@ const char *process_opts(int argc, const char *const *argv) { shbang_opts(&split_argv, cmdinfos); /* sets interp */ } else { - shbang_opts(&argv, cmdinfos); + shbang_opts(argv_io, cmdinfos); } - script = *argv++; + script = *(*argv_io)++; if (!script) badusage("need script argument"); return script; diff --git a/cprogs/prefork.h b/cprogs/prefork.h index ed8e609..adeb8b4 100644 --- a/cprogs/prefork.h +++ b/cprogs/prefork.h @@ -60,7 +60,7 @@ void tidy_garbage(void); extern const struct cmdinfo cmdinfos[]; // returns script pathname -const char *process_opts(int argc, const char *const *argv); +const char *process_opts(const char *const **argv_io); void vmsgcore(int estatus, int errnoval, const char *fmt, va_list al); -- 2.30.2