]> sigrok.org Git - libsigrok.git/blobdiff - output/output_text.c
output_text: Allocate enough memory for output
[libsigrok.git] / output / output_text.c
index 42fd1cac45eafe1eb6d1c7ed4ee08e0b3689f51d..6e2d4f08f46b0d02e1fda80b936fed0d08811b16 100644 (file)
@@ -25,7 +25,7 @@
 #include "config.h"
 
 #define DEFAULT_BPL_BITS 64
-#define DEFAULT_BPL_HEX  256
+#define DEFAULT_BPL_HEX  192
 
 struct context {
        unsigned int num_enabled_probes;
@@ -194,8 +194,8 @@ static int data_bits(struct output *o, char *data_in, uint64_t length_in,
        ctx = o->internal;
        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;
+       outsize = (1 + (length_in / ctx->unitsize) / ctx->samples_per_line)
+            * (ctx->num_enabled_probes * max_linelen);
 
        if (!(outbuf = calloc(1, outsize + 1)))
                return SIGROK_ERR_MALLOC;
@@ -247,7 +247,7 @@ static int data_bits(struct output *o, char *data_in, uint64_t length_in,
 
 static int init_hex(struct output *o)
 {
-       return init(o, DEFAULT_BPL_BITS);
+       return init(o, DEFAULT_BPL_HEX);
 }
 
 static int data_hex(struct output *o, char *data_in, uint64_t length_in,
@@ -321,7 +321,7 @@ struct output_format output_text_bits = {
 
 struct output_format output_text_hex = {
        "hex",
-       "Hexadecimal (takes argument, default 256)",
+       "Hexadecimal (takes argument, default 192)",
        DF_LOGIC,
        init_hex,
        data_hex,