]> sigrok.org Git - sigrok-cli.git/blobdiff - session.c
parse_probestring: Fix memory leak on error.
[sigrok-cli.git] / session.c
index 6f900853be27b7d2cc99da10ed9fccf51e43a1ed..9441f5da1865f86992e783056296f1f116b656dd 100644 (file)
--- a/session.c
+++ b/session.c
@@ -21,6 +21,8 @@
 #include "config.h"
 #include <glib.h>
 #include <glib/gstdio.h>
+#include <string.h>
+#include <stdlib.h>
 
 static struct sr_output_format *output_format = NULL;
 static int default_output_format = FALSE;
@@ -173,7 +175,10 @@ void datafeed_in(const struct sr_dev_inst *sdi,
        GSList *l;
        GString *out;
        int sample_size, ret;
-       uint64_t samplerate, output_len, filter_out_len, end_sample;
+       uint64_t samplerate, output_len, filter_out_len;
+#ifdef HAVE_SRD
+       uint64_t end_sample;
+#endif
        uint8_t *output_buf, *filter_out;
 
        (void) cb_data;
@@ -551,7 +556,7 @@ void run_session(void)
        GHashTable *devargs;
        GVariant *gvar;
        struct sr_dev_inst *sdi;
-       uint64_t max_samples;
+       uint64_t min_samples, max_samples;
        int max_probes, i;
        char **triggerlist;
 
@@ -630,11 +635,16 @@ void run_session(void)
                        sr_session_destroy();
                        return;
                }
-               if (sr_config_get(sdi->driver, sdi, NULL,
-                               SR_CONF_MAX_UNCOMPRESSED_SAMPLES, &gvar) == SR_OK) {
+               if (sr_config_list(sdi->driver, sdi, NULL,
+                               SR_CONF_LIMIT_SAMPLES, &gvar) == SR_OK) {
                        /* The device has no compression, or compression is turned
                         * off, and publishes its sample memory size. */
-                       max_samples = g_variant_get_uint64(gvar);
+                       g_variant_get(gvar, "(tt)", &min_samples, &max_samples);
+                       g_variant_unref(gvar);
+                       if (limit_samples < min_samples) {
+                               g_critical("The device stores at least %"PRIu64
+                                               " samples with the current settings.", min_samples);
+                       }
                        if (limit_samples > max_samples) {
                                g_critical("The device can store only %"PRIu64
                                                " samples with the current settings.", max_samples);