*
* skip: Allows skipping until given timestamp in the file.
* This can speed up analyzing of long captures.
- *
+ *
* Value < 0: Skip until first timestamp listed in
* the file. (default)
*
/*
* Reads a single VCD section from input file and parses it to name/contents.
- * e.g. $timescale 1ps $end => "timescale" "1ps"
+ * e.g. $timescale 1ps $end => "timescale" "1ps"
*/
static gboolean parse_section(GString *buf, gchar **name, gchar **contents)
{
status = FALSE;
pos = 0;
+ /* Skip UTF8 BOM */
+ if (buf->len >= 3 && !strncmp(buf->str, "\xef\xbb\xbf", 3))
+ pos = 3;
+
/* Skip any initial white-space. */
while (pos < buf->len && g_ascii_isspace(buf->str[pos]))
pos++;
inc = in->priv;
if (!inc->started) {
- std_session_send_df_header(in->sdi, LOG_PREFIX);
+ std_session_send_df_header(in->sdi);
packet.type = SR_DF_META;
packet.payload = &meta;
static int end(struct sr_input *in)
{
- struct sr_datafeed_packet packet;
struct context *inc;
int ret;
/* Send any samples that haven't been sent yet. */
send_buffer(in);
- if (inc->started) {
- packet.type = SR_DF_END;
- sr_session_send(in->sdi, &packet);
- }
+ if (inc->started)
+ std_session_send_df_end(in->sdi);
return ret;
}
inc->current_levels = NULL;
}
+static int reset(struct sr_input *in)
+{
+ struct context *inc = in->priv;
+
+ cleanup(in);
+ inc->started = FALSE;
+ g_string_truncate(in->buf, 0);
+
+ return SR_OK;
+}
+
static struct sr_option options[] = {
{ "numchannels", "Number of channels", "Number of channels", NULL, NULL },
{ "skip", "Skip", "Skip until timestamp", NULL, NULL },
.receive = receive,
.end = end,
.cleanup = cleanup,
+ .reset = reset,
};