Fix: track-untrack.c: regression of `--all --pid` option ordering
[lttng-tools.git] / src / bin / lttng / commands / track-untrack.c
index c54b6407802ed7cd0e342c057f9d3c460c05a351..f503c35617b7633e8d32f57b33e2dc42a57a1c5b 100644 (file)
@@ -19,6 +19,7 @@
 #define _LGPL_SOURCE
 #include <ctype.h>
 #include <popt.h>
+#include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -590,11 +591,12 @@ static
 int cmd_track_untrack(enum cmd_type cmd_type, const char *cmd_str,
                int argc, const char **argv, const char *help_msg)
 {
-       int opt, ret = 0;
+       int opt, ret = 0, success = 1;
+       bool opt_all_present = false;
        enum cmd_error_code command_ret = CMD_SUCCESS;
-       int success = 1;
        static poptContext pc;
        char *session_name = NULL;
+       const char *leftover = NULL;
        struct mi_writer *writer = NULL;
 
        if (argc < 1) {
@@ -670,29 +672,7 @@ int cmd_track_untrack(enum cmd_type cmd_type, const char *cmd_str,
                        type_state = STATE_VGID;
                        break;
                case OPT_ALL:
-                       switch (type_state) {
-                       case STATE_PID:
-                               opt_pid.all = 1;
-                               break;
-                       case STATE_VPID:
-                               opt_vpid.all = 1;
-                               break;
-                       case STATE_UID:
-                               opt_uid.all = 1;
-                               break;
-                       case STATE_VUID:
-                               opt_vuid.all = 1;
-                               break;
-                       case STATE_GID:
-                               opt_gid.all = 1;
-                               break;
-                       case STATE_VGID:
-                               opt_vgid.all = 1;
-                               break;
-                       default:
-                               command_ret = CMD_ERROR;
-                               goto end;
-                       }
+                       opt_all_present = true;
                        break;
                default:
                        command_ret = CMD_UNDEFINED;
@@ -706,6 +686,36 @@ int cmd_track_untrack(enum cmd_type cmd_type, const char *cmd_str,
                goto end;
        }
 
+       /*
+        * If the `--all` option is present set the appropriate tracker's `all`
+        * field.
+        */
+       if (opt_all_present) {
+               switch (type_state) {
+               case STATE_PID:
+                       opt_pid.all = 1;
+                       break;
+               case STATE_VPID:
+                       opt_vpid.all = 1;
+                       break;
+               case STATE_UID:
+                       opt_uid.all = 1;
+                       break;
+               case STATE_VUID:
+                       opt_vuid.all = 1;
+                       break;
+               case STATE_GID:
+                       opt_gid.all = 1;
+                       break;
+               case STATE_VGID:
+                       opt_vgid.all = 1;
+                       break;
+               default:
+                       command_ret = CMD_ERROR;
+                       goto end;
+               }
+       }
+
        if (!opt_session_name) {
                session_name = get_session_name();
                if (session_name == NULL) {
@@ -716,6 +726,13 @@ int cmd_track_untrack(enum cmd_type cmd_type, const char *cmd_str,
                session_name = opt_session_name;
        }
 
+       leftover = poptGetArg(pc);
+       if (leftover) {
+               ERR("Unknown argument: %s", leftover);
+               ret = CMD_ERROR;
+               goto end;
+       }
+
        /* Mi check */
        if (lttng_opt_mi) {
                writer = mi_lttng_writer_create(fileno(stdout), lttng_opt_mi);
This page took 0.025471 seconds and 5 git commands to generate.