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.
This commit is contained in:
		
							
								
								
									
										22
									
								
								arg.h
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								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
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user