aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHiltjo Posthuma <hiltjo@codemadness.org>2018-03-20 21:22:27 +0100
committerHiltjo Posthuma <hiltjo@codemadness.org>2018-03-20 21:22:27 +0100
commita5a928bfc1dd049780a45e072cb4ee42de7219bf (patch)
tree9224ca10b5045e1b6e53107430b007372977fc78
parent6ac8c8aa50d521f82d491ab54eb972660fdf3207 (diff)
downloadst-a5a928bfc1dd049780a45e072cb4ee42de7219bf.tar.gz
st-a5a928bfc1dd049780a45e072cb4ee42de7219bf.tar.bz2
st-a5a928bfc1dd049780a45e072cb4ee42de7219bf.zip
don't modify argv, use a counter
on some platforms (OpenBSD) this changes the exposed argv in tools using the kvm_* interface, such as ps and pgrep.
-rw-r--r--arg.h22
1 files changed, 12 insertions, 10 deletions
diff --git a/arg.h b/arg.h
index ba3fb3f..a22e019 100644
--- 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