]> git.mar77i.info Git - perftrace/commitdiff
don't need a counter variable on argv
authormar77i <mar77i@protonmail.ch>
Thu, 12 Mar 2026 08:11:49 +0000 (09:11 +0100)
committermar77i <mar77i@protonmail.ch>
Thu, 12 Mar 2026 08:11:49 +0000 (09:11 +0100)
perftrace.c

index e40a1f77e75696acd21385cf4166d0be85383931..1b3a71136ba328d0ecee01971ca8c41fd5579a58 100644 (file)
@@ -46,15 +46,15 @@ static inline int parse_delay(const char *ptr, struct timeval *delay) {
 }
 
 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:
@@ -68,7 +68,7 @@ static inline int parse_arg_delay(
         fprintf(stderr, "Error: delay too small!\n");
         return -1;
     }
-    return i;
+    return argc;
 error:
     fprintf(stderr, "Error: parsing '--delay'\n");
     return -1;
@@ -85,52 +85,51 @@ static inline pid_t parse_pid(const char *ptr) {
     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) {