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:
		
							parent
							
								
									6ac8c8aa50
								
							
						
					
					
						commit
						a5a928bfc1
					
				
							
								
								
									
										22
									
								
								arg.h
								
								
								
								
							
							
						
						
									
										22
									
								
								arg.h
								
								
								
								
							| 
						 | 
					@ -21,28 +21,30 @@ extern char *argv0;
 | 
				
			||||||
					argc--;\
 | 
										argc--;\
 | 
				
			||||||
					break;\
 | 
										break;\
 | 
				
			||||||
				}\
 | 
									}\
 | 
				
			||||||
				for (brk_ = 0, argv[0]++, argv_ = argv;\
 | 
									int i_;\
 | 
				
			||||||
						argv[0][0] && !brk_;\
 | 
									for (i_ = 1, brk_ = 0, argv_ = argv;\
 | 
				
			||||||
						argv[0]++) {\
 | 
											argv[0][i_] && !brk_;\
 | 
				
			||||||
 | 
											i_++) {\
 | 
				
			||||||
					if (argv_ != argv)\
 | 
										if (argv_ != argv)\
 | 
				
			||||||
						break;\
 | 
											break;\
 | 
				
			||||||
					argc_ = argv[0][0];\
 | 
										argc_ = argv[0][i_];\
 | 
				
			||||||
					switch (argc_)
 | 
										switch (argc_)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define ARGEND			}\
 | 
					#define ARGEND			}\
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define ARGC()		argc_
 | 
					#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) :\
 | 
									((x), abort(), (char *)0) :\
 | 
				
			||||||
				(brk_ = 1, (argv[0][1] != '\0')?\
 | 
									(brk_ = 1, (argv[0][i_+1] != '\0')?\
 | 
				
			||||||
					(&argv[0][1]) :\
 | 
										(&argv[0][i_+1]) :\
 | 
				
			||||||
					(argc--, argv++, argv[0])))
 | 
										(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 :\
 | 
									(char *)0 :\
 | 
				
			||||||
				(brk_ = 1, (argv[0][1] != '\0')?\
 | 
									(brk_ = 1, (argv[0][i_+1] != '\0')?\
 | 
				
			||||||
					(&argv[0][1]) :\
 | 
										(&argv[0][i_+1]) :\
 | 
				
			||||||
					(argc--, argv++, argv[0])))
 | 
										(argc--, argv++, argv[0])))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue