[hackers] [surf] Import the arg.h from st which fixed the oob bug. || Christoph Lohmann
 
commit 842103322cd3ff7f5871d17394544277bb50436c
Author:     Christoph Lohmann <20h_AT_r-36.net>
AuthorDate: Mon Feb 22 06:47:46 2016 +0100
Commit:     Christoph Lohmann <20h_AT_r-36.net>
CommitDate: Mon Feb 22 06:47:46 2016 +0100
    Import the arg.h from st which fixed the oob bug.
diff --git a/arg.h b/arg.h
index 6414822..ba3fb3f 100644
--- a/arg.h
+++ b/arg.h
_AT_@ -3,39 +3,46 @@
  * by 20h
  */
 
-#ifndef __ARG_H__
-#define __ARG_H__
+#ifndef ARG_H__
+#define ARG_H__
 
 extern char *argv0;
 
-#define USED(x) ((void)(x))
-
+/* use main(int argc, char *argv[]) */
 #define ARGBEGIN	for (argv0 = *argv, argv++, argc--;\
-					argv[0] && argv[0][1]\
-					&& argv[0][0] == '-';\
+					argv[0] && argv[0][0] == '-'\
+					&& argv[0][1];\
                                         argc--, argv++) {\
-				char _argc;\
-				char **_argv;\
+				char argc_;\
+				char **argv_;\
+				int brk_;\
                                 if (argv[0][1] == '-' && argv[0][2] == '\0') {\
                                         argv++;\
                                         argc--;\
                                         break;\
                                 }\
-				for (argv[0]++, _argv = argv; argv[0][0];\
+				for (brk_ = 0, argv[0]++, argv_ = argv;\
+						argv[0][0] && !brk_;\
                                                 argv[0]++) {\
-					if (_argv != argv)\
+					if (argv_ != argv)\
                                                 break;\
-					_argc = argv[0][0];\
-					switch (_argc)
-
+					argc_ = argv[0][0];\
+					switch (argc_)
 #define ARGEND			}\
-				USED(_argc);\
-			}\
-			USED(argv);\
-			USED(argc);
+			}
 
-#define EARGF(x)	((argv[1] == NULL)? ((x), abort(), (char *)0) :\
-			(argc--, argv++, argv[0]))
+#define ARGC()		argc_
 
-#endif
+#define EARGF(x)	((argv[0][1] == '\0' && argv[1] == NULL)?\
+				((x), abort(), (char *)0) :\
+				(brk_ = 1, (argv[0][1] != '\0')?\
+					(&argv[0][1]) :\
+					(argc--, argv++, argv[0])))
 
+#define ARGF()		((argv[0][1] == '\0' && argv[1] == NULL)?\
+				(char *)0 :\
+				(brk_ = 1, (argv[0][1] != '\0')?\
+					(&argv[0][1]) :\
+					(argc--, argv++, argv[0])))
+
+#endif
Received on Mon Feb 22 2016 - 06:48:08 CET
This archive was generated by hypermail 2.3.0
: Mon Feb 22 2016 - 07:00:13 CET