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-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.
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; 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 |