]> sigrok.org Git - libsigrok.git/commitdiff
proper fix for output_text corner cases
authorBert Vermeulen <redacted>
Wed, 29 Dec 2010 00:22:58 +0000 (01:22 +0100)
committerBert Vermeulen <redacted>
Wed, 29 Dec 2010 00:22:58 +0000 (01:22 +0100)
limit probe names to 32 chars

output/output_text.c
sigrok.h

index f6d9357a7902ce68d84d60076721d50276c06e9c..621729b7d25b123ee5f18f01ef9e57bde26c6d0e 100644 (file)
@@ -69,6 +69,7 @@ static void flush_linebufs(struct context *ctx, char *outbuf)
                        ctx->mark_trigger + (ctx->mark_trigger / 8), "");
 
        memset(ctx->linebuf, 0, i * ctx->linebuf_len);
+
 }
 
 static int init(struct output *o, int default_spl)
@@ -180,12 +181,13 @@ static int data_bits(struct output *o, char *data_in, uint64_t length_in,
 {
        struct context *ctx;
        unsigned int outsize, offset, p;
+       int max_linelen;
        uint64_t sample;
        char *outbuf;
 
        ctx = o->internal;
-       outsize = length_in / ctx->unitsize * ctx->num_enabled_probes *
-                 ctx->samples_per_line + 4096;
+       max_linelen = MAX_PROBENAME_LEN + 3 + ctx->samples_per_line + ctx->samples_per_line / 8;
+       outsize = length_in / ctx->unitsize * ctx->num_enabled_probes / ctx->samples_per_line * max_linelen + 512;
 
        if (!(outbuf = calloc(1, outsize + 1)))
                return SIGROK_ERR_MALLOC;
@@ -248,12 +250,13 @@ static int data_hex(struct output *o, char *data_in, uint64_t length_in,
 {
        struct context *ctx;
        unsigned int outsize, offset, p;
+       int max_linelen;
        uint64_t sample;
        char *outbuf;
 
        ctx = o->internal;
-       outsize = length_in / ctx->unitsize * ctx->num_enabled_probes *
-                 ctx->samples_per_line + 4096;
+       max_linelen = MAX_PROBENAME_LEN + 3 + ctx->samples_per_line + ctx->samples_per_line / 2;
+       outsize = length_in / ctx->unitsize * ctx->num_enabled_probes / ctx->samples_per_line * max_linelen + 512;
 
        if (!(outbuf = calloc(1, outsize + 1)))
                return SIGROK_ERR_MALLOC;
index a1531bf73af178cf02ef5d86466d04833b234466..b34d2b41820a130bd0fea7b67adff4d7abee9199 100644 (file)
--- a/sigrok.h
+++ b/sigrok.h
@@ -210,6 +210,7 @@ struct device {
        struct datastore *datastore;
 };
 
+#define MAX_PROBENAME_LEN 32
 struct probe {
        int index;
        gboolean enabled;