X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Finput%2Fvcd.c;h=b9e9497dc8baf07b65370329179a615d2c175531;hb=3ad0308c554029906040442d376312d128c2b51f;hp=5051f0e37d8bb97b20c67dc8a50f88bb381050a3;hpb=9a4fd01af84ac4739074c0e27b5ef3cb43637215;p=libsigrok.git diff --git a/src/input/vcd.c b/src/input/vcd.c index 5051f0e3..b9e9497d 100644 --- a/src/input/vcd.c +++ b/src/input/vcd.c @@ -265,7 +265,7 @@ static gboolean parse_header(const struct sr_input *in, GString *buf) return status; } -static int format_match(GHashTable *metadata) +static int format_match(GHashTable *metadata, unsigned int *confidence) { GString *buf, *tmpbuf; gboolean status; @@ -283,7 +283,11 @@ static int format_match(GHashTable *metadata) g_free(name); g_free(contents); - return status ? SR_OK : SR_ERR; + if (!status) + return SR_ERR; + *confidence = 1; + + return SR_OK; } /* Send all accumulated bytes from inc->buffer. */ @@ -404,6 +408,10 @@ static void parse_contents(const struct sr_input *in, char *data) inc->prev_timestamp = inc->skip; } else if (timestamp == inc->prev_timestamp) { /* Ignore repeated timestamps (e.g. sigrok outputs these) */ + } else if (timestamp < inc->prev_timestamp) { + sr_err("Invalid timestamp: %" PRIu64 " (smaller than previous timestamp).", timestamp); + inc->skip_until_end = TRUE; + break; } else { if (inc->compress != 0 && timestamp - inc->prev_timestamp > inc->compress) { /* Compress long idle periods */ @@ -648,7 +656,7 @@ static const struct sr_option *get_options(void) SR_PRIV struct sr_input_module input_vcd = { .id = "vcd", .name = "VCD", - .desc = "Value Change Dump", + .desc = "Value Change Dump data", .exts = (const char*[]){"vcd", NULL}, .metadata = { SR_INPUT_META_HEADER | SR_INPUT_META_REQUIRED }, .options = get_options,