]> sigrok.org Git - sigrok-cli.git/blobdiff - sigrok-cli.c
cli: output API says to check data_out, not length_out
[sigrok-cli.git] / sigrok-cli.c
index f13e092a0947adcd0c5cc7c40c043721bcb8269a..a67b6a3be61ed219309744fd48a9529bafb418cc 100644 (file)
@@ -473,7 +473,7 @@ static void datafeed_in(struct sr_dev *dev, struct sr_datafeed_packet *packet)
                }
                if (o->format->event) {
                        o->format->event(o, SR_DF_END, &output_buf, &output_len);
-                       if (output_len) {
+                       if (output_buf) {
                                if (outfile)
                                        fwrite(output_buf, 1, output_len, outfile);
                                g_free(output_buf);
@@ -582,7 +582,7 @@ static void datafeed_in(struct sr_dev *dev, struct sr_datafeed_packet *packet)
                        output_len = 0;
                        if (o->format->data && packet->type == o->format->df_type)
                                o->format->data(o, filter_out, filter_out_len, &output_buf, &output_len);
-                       if (output_len) {
+                       if (output_buf) {
                                fwrite(output_buf, 1, output_len, outfile);
                                g_free(output_buf);
                        }
@@ -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;