From: Wolfram Sang Date: Sat, 9 Jan 2016 22:17:02 +0000 (+0100) Subject: input: vcd: support 1 bit vectors X-Git-Tag: libsigrok-0.4.0~18 X-Git-Url: https://sigrok.org/gitweb/?p=libsigrok.git;a=commitdiff_plain;h=34724ffa340b4df9706aa02d686563ed72b7840f input: vcd: support 1 bit vectors Use the new process_bit() function to parse 1 bit vectors, too. This is the first step to fix bug #723. Minimal testcase vcd: $timescale 1 ns $end $var wire 1 n0 addr_0 $end $var wire 1 n1 addr_1 $end $enddefinitions $end #0 0n0 b1 n1 #1 1n0 b0 n1 #2 0n0 b1 n1 #3 1n0 b0 n1 Signed-off-by: Wolfram Sang --- diff --git a/src/input/vcd.c b/src/input/vcd.c index 47511c41..a9d3c45c 100644 --- a/src/input/vcd.c +++ b/src/input/vcd.c @@ -428,14 +428,28 @@ static void parse_contents(const struct sr_input *in, char *data) inc->skip_until_end = TRUE; break; } - } else if (strchr("bBrR", tokens[i][0]) != NULL) { - sr_dbg("Vector values not supported yet"); + } else if (strchr("rR", tokens[i][0]) != NULL) { + sr_dbg("Real type vector values not supported yet!"); if (!tokens[++i]) /* No tokens left, bail out */ break; else /* Process next token */ continue; + } else if (strchr("bB", tokens[i][0]) != NULL) { + bit = (tokens[i][1] == '1'); + + /* + * Bail out if a) char after 'b' is NUL, or b) there is + * a second character after 'b', or c) there is no + * identifier. + */ + if (!tokens[i][1] || tokens[i][2] || !tokens[++i]) { + sr_dbg("Unexpected vector format!"); + break; + } + + process_bit(inc, tokens[i], bit); } else if (strchr("01xXzZ", tokens[i][0]) != NULL) { char *identifier;