session: Supply filename to the output module directly
authorSoeren Apel <soeren@apelpie.net>
Wed, 29 Jul 2015 19:37:47 +0000 (21:37 +0200)
committerUwe Hermann <uwe@hermann-uwe.de>
Thu, 30 Jul 2015 17:22:43 +0000 (19:22 +0200)
This fixes parts of bug #570.

session.c
sigrok-cli.h

index 9fa545ec690a35fc5b6f3e742df2eb472ec5ce0c..b045119483a8238b1091fd8bf2c42e1c4343e98d 100644 (file)
--- a/session.c
+++ b/session.c
@@ -25,7 +25,6 @@
 
 static uint64_t limit_samples = 0;
 static uint64_t limit_frames = 0;
-static char *srzip_and_filename = NULL;
 
 #ifdef HAVE_SRD
 extern struct srd_session *srd_sess;
@@ -81,17 +80,13 @@ const struct sr_output *setup_output_format(const struct sr_dev_inst *sdi)
        const struct sr_option **options;
        const struct sr_output *o;
        GHashTable *fmtargs, *fmtopts;
-       int size;
        char *fmtspec;
 
        if (!opt_output_format) {
                if (opt_output_file) {
-                       size = strlen(opt_output_file) + 32;
-                       srzip_and_filename = g_malloc(size);
-                       snprintf(srzip_and_filename, size, "srzip:filename=%s", opt_output_file);
-                       opt_output_format = srzip_and_filename;
+                       opt_output_format = DEFAULT_OUTPUT_FORMAT_FILE;
                } else {
-                       opt_output_format = DEFAULT_OUTPUT_FORMAT;
+                       opt_output_format = DEFAULT_OUTPUT_FORMAT_NOFILE;
                }
        }
 
@@ -107,7 +102,8 @@ const struct sr_output *setup_output_format(const struct sr_dev_inst *sdi)
                sr_output_options_free(options);
        } else
                fmtopts = NULL;
-       o = sr_output_new(omod, fmtopts, sdi);
+       o = sr_output_new(omod, fmtopts, sdi, opt_output_file);
+
        if (fmtopts)
                g_hash_table_destroy(fmtopts);
        g_hash_table_destroy(fmtargs);
@@ -182,7 +178,7 @@ void datafeed_in(const struct sr_dev_inst *sdi,
                        g_critical("Failed to initialize output module.");
 
                /* Set up backup analog output module. */
-               oa = sr_output_new(sr_output_find("analog"), NULL, sdi);
+               oa = sr_output_new(sr_output_find("analog"), NULL, sdi, NULL);
 
                if (opt_output_file)
                        outfile = g_fopen(opt_output_file, "wb");
@@ -330,10 +326,8 @@ void datafeed_in(const struct sr_dev_inst *sdi,
        if (packet->type == SR_DF_END) {
                g_debug("cli: Received SR_DF_END.");
 
-               if (o) {
+               if (o)
                        sr_output_free(o);
-                       g_free(srzip_and_filename);
-               }
                o = NULL;
 
                sr_output_free(oa);
index f05a1695caad6ef38bd4221250b39a90e56e678e..eaee7e6fbcf40f0edb8390ebebe349924ac908f5 100644 (file)
@@ -27,7 +27,8 @@
 #endif
 #include <libsigrok/libsigrok.h>
 
-#define DEFAULT_OUTPUT_FORMAT "bits:width=64"
+#define DEFAULT_OUTPUT_FORMAT_FILE "srzip"
+#define DEFAULT_OUTPUT_FORMAT_NOFILE "bits:width=64"
 #define SAVE_CHUNK_SIZE (512 * 1024)
 
 /* main.c */