}
static inline int parse_arg_delay(
- int argc, char **argv, int i, struct args *a, long clock_ticks
+ int argc, char **argv, struct args *a, long clock_ticks
) {
- switch (argv[i][7]) {
+ switch (*argv[7]) {
case '=':
- if (parse_delay(argv[i] + 8, &a->delay) < 0)
+ if (parse_delay(*argv + 8, &a->delay) < 0)
goto error;
break;
case '\0':
- if (++i >= argc || parse_delay(argv[i], &a->delay) < 0)
+ if (argc-- == 0 || parse_delay(*++argv, &a->delay) < 0)
goto error;
break;
default:
fprintf(stderr, "Error: delay too small!\n");
return -1;
}
- return i;
+ return argc;
error:
fprintf(stderr, "Error: parsing '--delay'\n");
return -1;
return pid;
}
-static inline int parse_arg_pid(int argc, char **argv, int i, struct args *a) {
+static inline int parse_arg_pid(int argc, char **argv, struct args *a) {
if (a->pid != 0) {
fprintf(stderr, "Error: '--pid' already specified.\n");
return -1;
}
- switch (argv[i][5]) {
+ switch (*argv[5]) {
case '=':
- if ((a->pid = parse_pid(argv[i] + 6)) < 0)
+ if ((a->pid = parse_pid(*argv + 6)) < 0)
break;
- return i;
+ return argc;
case '\0':
- if (++i >= argc || (a->pid = parse_pid(argv[i])) < 0)
+ if (argc-- == 0 || (a->pid = parse_pid(*++argv)) < 0)
break;
- return i;
+ return argc;
}
fprintf(stderr, "Error: parsing '--pid'\n");
return -1;
}
-static inline int parse_arg_argv(int argc, char **argv, int i, struct args *a) {
+static inline int parse_arg_argv(int argc, char **argv, struct args *a) {
if (a->pid != 0) {
fprintf(stderr, "Error: '--pid' already specified.\n");
return -1;
}
- if (++i >= argc) {
+ if (argc-- == 0) {
fprintf(stderr, "Error: arguments expected after '--'\n");
return -1;
}
- a->argv = argv + i;
+ a->argv = ++argv;
return argc;
}
int parse_args(int argc, char **argv, struct args *a, long clock_ticks) {
- int i;
- for (i = 1; i < argc; i++) {
- if (strncmp(argv[i], "--delay", 7) == 0)
- i = parse_arg_delay(argc, argv, i, a, clock_ticks);
- else if (strncmp(argv[i], "--pid", 5) == 0)
- i = parse_arg_pid(argc, argv, i, a);
- else if (strcmp(argv[i], "--") == 0)
- i = parse_arg_argv(argc, argv, i, a);
+ for (argv++, argc--; argc > 0; argv++, argc--) {
+ if (strncmp(*argv, "--delay", 7) == 0)
+ argc = parse_arg_delay(argc, argv, a, clock_ticks);
+ else if (strncmp(*argv, "--pid", 5) == 0)
+ argc = parse_arg_pid(argc, argv, a);
+ else if (strcmp(*argv, "--") == 0)
+ argc = parse_arg_argv(argc, argv, a);
else {
- fprintf(stderr, "Error: Invalid arguments.\n");
+ fprintf(stderr, "Error: Invalid argument: '%s'.\n", *argv);
return -1;
}
- if (i == -1)
+ if (argc == -1)
return -1;
}
if (a->pid == 0 && a->argv == NULL) {