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 | |
| parent | 6ac8c8aa50d521f82d491ab54eb972660fdf3207 (diff) | |
| download | st-a5a928bfc1dd049780a45e072cb4ee42de7219bf.tar.gz 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.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 | 
