瀏覽代碼

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.
Hiltjo Posthuma 7 年之前
父節點
當前提交
a5a928bfc1
共有 1 個文件被更改,包括 12 次插入10 次删除
  1. 12 10
      arg.h

+ 12 - 10
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