]> jfr.im git - solanum.git/commitdiff
getopt: don't modify argv as it breaks restart()
authorSimon Arlott <sa.me.uk>
Mon, 25 Apr 2016 22:21:38 +0000 (23:21 +0100)
committerSimon Arlott <sa.me.uk>
Mon, 25 Apr 2016 22:32:18 +0000 (23:32 +0100)
include/ircd_getopt.h
ircd/getopt.c
ircd/ircd.c
ircd/restart.c

index 763cb489c90434685ebcc14f073d0c3c8a60d44d..9ffeb76da50e1b1799bbdce4eb9c37dcdb2ef3fb 100644 (file)
@@ -37,7 +37,7 @@ struct lgetopt
 
 extern struct lgetopt myopts[];
 
-void usage(char *);
-void parseargs(int *, char ***, struct lgetopt *);
+void usage(const char *);
+void parseargs(int *, char * const **, struct lgetopt *);
 
 #endif /* __GETOPT_H_INCLUDED__ */
index 9e28ea2f8c9b70a81df9e14ef016b7796a848681..f7c6c826c09df73d2d842f3e528a94ad5b1273f2 100644 (file)
 # define OPTCHAR '-'
 
 void
-parseargs(int *argc, char ***argv, struct lgetopt *opts)
+parseargs(int *argc, char * const **argv, struct lgetopt *opts)
 {
        int i;
-       char *progname = (*argv)[0];
+       const char *progname = (*argv)[0];
 
        /* loop through each argument */
        for (;;)
@@ -53,12 +53,10 @@ parseargs(int *argc, char ***argv, struct lgetopt *opts)
                        return;
                }
 
-               (*argv)[0]++;
-
                /* search through our argument list, and see if it matches */
                for (i = 0; opts[i].opt; i++)
                {
-                       if(!strcmp(opts[i].opt, (*argv)[0]))
+                       if(!strcmp(opts[i].opt, &(*argv)[0][1]))
                        {
                                /* found our argument */
                                found = 1;
@@ -74,7 +72,7 @@ parseargs(int *argc, char ***argv, struct lgetopt *opts)
                                                fprintf(stderr,
                                                        "Error: option '%c%s' requires an argument\n",
                                                        OPTCHAR, opts[i].opt);
-                                               usage((*argv)[0]);
+                                               usage(progname);
                                        }
 
                                        *((int *) opts[i].argloc) = atoi((*argv)[1]);
@@ -111,14 +109,14 @@ parseargs(int *argc, char ***argv, struct lgetopt *opts)
                }
                if(!found)
                {
-                       fprintf(stderr, "error: unknown argument '%c%s'\n", OPTCHAR, (*argv)[0]);
+                       fprintf(stderr, "error: unknown argument '%c%s'\n", OPTCHAR, &(*argv)[0][1]);
                        usage(progname);
                }
        }
 }
 
 void
-usage(char *name)
+usage(const char *name)
 {
        int i = 0;
 
index 45f58db1214b22e4786e9d03ab3701e14d90977f..3a16a40c7690df6ec5ba9d6cfc27a9acf3d09286 100644 (file)
@@ -94,7 +94,7 @@ rb_dlink_list global_serv_list;    /* global servers on the network */
 rb_dlink_list local_oper_list;     /* our opers, duplicated in lclient_list */
 rb_dlink_list oper_list;           /* network opers */
 
-char **myargv;
+char * const *myargv;
 volatile sig_atomic_t dorehash = false;
 volatile sig_atomic_t dorehashbans = false;
 volatile sig_atomic_t doremotd = false;
@@ -645,7 +645,7 @@ seed_random(void *unused)
  * Side Effects - this is where the ircd gets going right now
  */
 int
-charybdis_main(int argc, char *argv[])
+charybdis_main(int argc, char * const argv[])
 {
        int fd;
 
index f91f9293c17a8ab3b5ac9d05fc99fddc6c670f9a..2db2a2ec15a14af2359e0b5bd0458408658abf3e 100644 (file)
@@ -32,7 +32,7 @@
 #include "ircd_signal.h"
 
 /* external var */
-extern char **myargv;
+extern char * const *myargv;
 
 void
 restart(const char *mesg)