Fix oob in arg.h. - thinglaunch - A simple command and password promtper for X1… | |
git clone git://bitreich.org/thinglaunch | |
Log | |
Files | |
Refs | |
Tags | |
LICENSE | |
--- | |
commit a80c9725e8fdc55c1b69de9d7bbcc48e0e1aab42 | |
parent 3c24e44bec97808fe9489b9e58b01a18bc60a9d8 | |
Author: Christoph Lohmann <[email protected]> | |
Date: Thu, 3 Mar 2016 13:43:01 +0100 | |
Fix oob in arg.h. | |
Diffstat: | |
M arg.h | 47 ++++++++++++++++++-----------… | |
1 file changed, 27 insertions(+), 20 deletions(-) | |
--- | |
diff --git a/arg.h b/arg.h | |
@@ -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 |