9static int ARG_LONG_func(
wchar_t **argv0,
char const *name) {
10 wchar_t *argIt = *argv0;
11 while (*argIt == *name && *argIt) {
14 if (*argIt == *name || (*argIt ==
'=' && !*name)) {
23 for (argv[0] && (--argc, ++argv); argv[0] && argv[0][0] == '-'; \
24 argv[0] && (--argc, ++argv)) { \
26 wchar_t *arg = argv[0]; \
27 if (arg[1] == '-' && arg[2] == 0 && (--argc, ++argv, 1)) \
30 switch ((++arg)[0]) { \
36#define ARG_LONG(name) ARG_LONG_func(&(arg), (name))
39 (isFlag ? (arg[1] ? ++arg : *(--argc, ++argv)) : (arg[0] == '=' ? ++arg : *(--argc, ++argv)))
42 if (isFlag && arg[1]) \
58#if defined(ARG_EXAMPLE) || defined(ARG_FUZZ)
71int main(
int argc,
char **argv) {
72 char *argv0 = argv[0];
73 int a = 0, b = 0, c = 0, reverse = 0;
74 char const *input =
"default", *output =
"default";
95 }
else if (ARG_LONG(
"reverse"))
100 else if (ARG_LONG(
"input"))
case 'i': {
103 else if (ARG_LONG(
"output"))
case 'o': {
106 else if (ARG_LONG(
"help"))
case 'h':
108 printf(
"Usage: %s [OPTION...] [STRING...]\n", argv0);
109 puts(
"Example usage of arg.h\n");
111 puts(
" -a, set a to true");
112 puts(
" -b, set b to true");
113 puts(
" -c, set c to true");
114 puts(
" -r, --reverse set reverse to true");
115 puts(
" -i, --input=STR set input string to STR");
116 puts(
" -o, --output=STR set output string to STR");
117 puts(
" -h, --help display this help and exit");
123 "%s: invalid option '%s'\n"
124 "Try '%s --help' for more information.\n",
134 printf(
"a = %s\n", a ?
"true" :
"false");
135 printf(
"b = %s\n", b ?
"true" :
"false");
136 printf(
"c = %s\n", c ?
"true" :
"false");
137 printf(
"reverse = %s\n", reverse ?
"true" :
"false");
138 printf(
"readstdin = %s\n", readstdin ?
"true" :
"false");
139 printf(
"input = %s\n", input);
140 printf(
"output = %s\n", output);
142 printf(
"\nargc: %d", argc);
145 printf(
" %s\n", *argv++);
161#define MAX_ARGC 50000
163int LLVMFuzzerTestOneInput(
const uint8_t *data,
size_t size) {
168 char *buf = malloc(size + 2);
169 memcpy(buf, data, size);
170 buf[size] = buf[size + 1] = 0;
172 static char *argv[MAX_ARGC + 1];
174 for (
char *ptr = buf; *ptr && argc < MAX_ARGC;) {