cli: strip off PD arguments before selecting for annotation
authorBert Vermeulen <bert@biot.com>
Thu, 31 May 2012 21:57:16 +0000 (23:57 +0200)
committerBert Vermeulen <bert@biot.com>
Thu, 31 May 2012 21:58:45 +0000 (23:58 +0200)
This fixes the bug where -A didn't work if the PD in question had arguments.

sigrok-cli.c

index f13e092a0947adcd0c5cc7c40c043721bcb8269a..a8e263dcf0cf082a9f0adf0a87cd4e9c10870946 100644 (file)
@@ -745,7 +745,7 @@ int setup_pd_stack(void)
 {
        struct srd_decoder_inst *di_from, *di_to;
        int ret, i;
-       char **pds;
+       char **pds, **ids;
 
        /* Set up the protocol decoder stack. */
        pds = g_strsplit(opt_pds, ",", 0);
@@ -761,17 +761,26 @@ int setup_pd_stack(void)
                        }
                }
 
-               if (!(di_from = srd_inst_find_by_id(pds[0]))) {
+               /* First PD goes at the bottom of the stack. */
+               ids = g_strsplit(pds[0], ":", 0);
+               if (!(di_from = srd_inst_find_by_id(ids[0]))) {
+                       g_strfreev(ids);
                        g_critical("Cannot stack protocol decoder '%s': "
                                        "instance not found.", pds[0]);
                        return 1;
                }
+               g_strfreev(ids);
+
+               /* Every subsequent PD goes on top. */
                for (i = 1; pds[i]; i++) {
-                       if (!(di_to = srd_inst_find_by_id(pds[i]))) {
+                       ids = g_strsplit(pds[i], ":", 0);
+                       if (!(di_to = srd_inst_find_by_id(ids[0]))) {
+                               g_strfreev(ids);
                                g_critical("Cannot stack protocol decoder '%s': "
                                                "instance not found.", pds[i]);
                                return 1;
                        }
+                       g_strfreev(ids);
                        if ((ret = srd_inst_stack(di_from, di_to)) != SRD_OK)
                                return 1;