X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Finput%2Fvcd.c;fp=src%2Finput%2Fvcd.c;h=95092cb2e5bf5363697a933051ad4cb4bf1dc391;hb=4237ab9e5ba85153b632b43b7eb2411530e11df8;hp=b9e9497dc8baf07b65370329179a615d2c175531;hpb=76f712a73f3213a7ec0a38e38302cf2f04f48976;p=libsigrok.git diff --git a/src/input/vcd.c b/src/input/vcd.c index b9e9497d..95092cb2 100644 --- a/src/input/vcd.c +++ b/src/input/vcd.c @@ -151,7 +151,11 @@ static gboolean parse_section(GString *buf, gchar **name, gchar **contents) static void free_channel(void *data) { - struct vcd_channel *vcd_ch = data; + struct vcd_channel *vcd_ch; + + vcd_ch = data; + if (!vcd_ch) + return; g_free(vcd_ch->name); g_free(vcd_ch->identifier); g_free(vcd_ch); @@ -615,6 +619,7 @@ static void cleanup(struct sr_input *in) inc = in->priv; g_slist_free_full(inc->channels, free_channel); + inc->channels = NULL; g_free(inc->buffer); inc->buffer = NULL; g_free(inc->current_levels); @@ -626,9 +631,16 @@ static int reset(struct sr_input *in) struct context *inc = in->priv; cleanup(in); - inc->started = FALSE; g_string_truncate(in->buf, 0); + inc->started = FALSE; + inc->got_header = FALSE; + inc->prev_timestamp = 0; + inc->skip_until_end = FALSE; + inc->channelcount = 0; + /* The inc->channels list was released in cleanup() above. */ + inc->buffer = g_malloc(CHUNK_SIZE); + return SR_OK; }