don't modify argv, use a counter
authorHiltjo Posthuma <hiltjo@codemadness.org>
Tue, 20 Mar 2018 20:22:27 +0000 (21:22 +0100)
committerHiltjo Posthuma <hiltjo@codemadness.org>
Tue, 20 Mar 2018 20:22:27 +0000 (21:22 +0100)
on some platforms (OpenBSD) this changes the exposed argv in tools using
the kvm_* interface, such as ps and pgrep.

arg.h

diff --git a/arg.h b/arg.h
index ba3fb3f..a22e019 100644 (file)
--- a/arg.h
+++ b/arg.h
@@ -21,28 +21,30 @@ extern char *argv0;
                                        argc--;\
                                        break;\
                                }\
-                               for (brk_ = 0, argv[0]++, argv_ = argv;\
-                                               argv[0][0] && !brk_;\
-                                               argv[0]++) {\
+                               int i_;\
+                               for (i_ = 1, brk_ = 0, argv_ = argv;\
+                                               argv[0][i_] && !brk_;\
+                                               i_++) {\
                                        if (argv_ != argv)\
                                                break;\
-                                       argc_ = argv[0][0];\
+                                       argc_ = argv[0][i_];\
                                        switch (argc_)
+
 #define ARGEND                 }\
                        }
 
 #define ARGC()         argc_
 
-#define EARGF(x)       ((argv[0][1] == '\0' && argv[1] == NULL)?\
+#define EARGF(x)       ((argv[0][i_+1] == '\0' && argv[1] == NULL)?\
                                ((x), abort(), (char *)0) :\
-                               (brk_ = 1, (argv[0][1] != '\0')?\
-                                       (&argv[0][1]) :\
+                               (brk_ = 1, (argv[0][i_+1] != '\0')?\
+                                       (&argv[0][i_+1]) :\
                                        (argc--, argv++, argv[0])))
 
-#define ARGF()         ((argv[0][1] == '\0' && argv[1] == NULL)?\
+#define ARGF()         ((argv[0][i_+1] == '\0' && argv[1] == NULL)?\
                                (char *)0 :\
-                               (brk_ = 1, (argv[0][1] != '\0')?\
-                                       (&argv[0][1]) :\
+                               (brk_ = 1, (argv[0][i_+1] != '\0')?\
+                                       (&argv[0][i_+1]) :\
                                        (argc--, argv++, argv[0])))
 
 #endif