diff options
author | Hiltjo Posthuma <hiltjo@codemadness.org> | 2018-03-20 21:22:27 +0100 |
---|---|---|
committer | Hiltjo Posthuma <hiltjo@codemadness.org> | 2018-03-20 21:22:27 +0100 |
commit | a5a928bfc1dd049780a45e072cb4ee42de7219bf (patch) | |
tree | 9224ca10b5045e1b6e53107430b007372977fc78 /arg.h | |
parent | 6ac8c8aa50d521f82d491ab54eb972660fdf3207 (diff) | |
download | st-patched-a5a928bfc1dd049780a45e072cb4ee42de7219bf.tar.bz2 st-patched-a5a928bfc1dd049780a45e072cb4ee42de7219bf.tar.xz st-patched-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.
Diffstat (limited to 'arg.h')
-rw-r--r-- | arg.h | 22 |
1 files changed, 12 insertions, 10 deletions
@@ -21,28 +21,30 @@ extern char *argv0; | |||
21 | argc--;\ | 21 | argc--;\ |
22 | break;\ | 22 | break;\ |
23 | }\ | 23 | }\ |
24 | for (brk_ = 0, argv[0]++, argv_ = argv;\ | 24 | int i_;\ |
25 | argv[0][0] && !brk_;\ | 25 | for (i_ = 1, brk_ = 0, argv_ = argv;\ |
26 | argv[0]++) {\ | 26 | argv[0][i_] && !brk_;\ |
27 | i_++) {\ | ||
27 | if (argv_ != argv)\ | 28 | if (argv_ != argv)\ |
28 | break;\ | 29 | break;\ |
29 | argc_ = argv[0][0];\ | 30 | argc_ = argv[0][i_];\ |
30 | switch (argc_) | 31 | switch (argc_) |
32 | |||
31 | #define ARGEND }\ | 33 | #define ARGEND }\ |
32 | } | 34 | } |
33 | 35 | ||
34 | #define ARGC() argc_ | 36 | #define ARGC() argc_ |
35 | 37 | ||
36 | #define EARGF(x) ((argv[0][1] == '\0' && argv[1] == NULL)?\ | 38 | #define EARGF(x) ((argv[0][i_+1] == '\0' && argv[1] == NULL)?\ |
37 | ((x), abort(), (char *)0) :\ | 39 | ((x), abort(), (char *)0) :\ |
38 | (brk_ = 1, (argv[0][1] != '\0')?\ | 40 | (brk_ = 1, (argv[0][i_+1] != '\0')?\ |
39 | (&argv[0][1]) :\ | 41 | (&argv[0][i_+1]) :\ |
40 | (argc--, argv++, argv[0]))) | 42 | (argc--, argv++, argv[0]))) |
41 | 43 | ||
42 | #define ARGF() ((argv[0][1] == '\0' && argv[1] == NULL)?\ | 44 | #define ARGF() ((argv[0][i_+1] == '\0' && argv[1] == NULL)?\ |
43 | (char *)0 :\ | 45 | (char *)0 :\ |
44 | (brk_ = 1, (argv[0][1] != '\0')?\ | 46 | (brk_ = 1, (argv[0][i_+1] != '\0')?\ |
45 | (&argv[0][1]) :\ | 47 | (&argv[0][i_+1]) :\ |
46 | (argc--, argv++, argv[0]))) | 48 | (argc--, argv++, argv[0]))) |
47 | 49 | ||
48 | #endif | 50 | #endif |