chiark / gitweb /
prefork: Have process_opts update argv and not take argc
[chiark-utils.git] / cprogs / prefork.c
index f306ffc9a2653196fd068787436367cab09cb06b..607cdb72afcb14b3d1b6d0ddb50c7950a03b49e7 100644 (file)
@@ -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 <interp> */
-    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;