goto error;
}
+ if (pos->last_offset == pos->offset) {
+ fprintf(stderr, "[error] Invalid 0 byte event encountered.\n");
+ return -EINVAL;
+ }
+
return 0;
error:
/*
* for SEEK_CUR: go to next packet.
- * for SEEK_POS: go to packet numer (index).
+ * for SEEK_SET: go to packet numer (index).
*/
void ctf_packet_seek(struct bt_stream_pos *stream_pos, size_t index, int whence)
{
switch (whence) {
case SEEK_CUR:
/* The writer will add padding */
- pos->mmap_offset += WRITE_PACKET_LEN / CHAR_BIT;
+ pos->mmap_offset += pos->packet_size / CHAR_BIT;
break;
case SEEK_SET:
assert(index == 0); /* only seek supported for now */
pos->offset = 0;
} else {
read_next_packet:
- if (pos->cur_index >= pos->packet_cycles_index->len) {
- pos->offset = EOF;
- return;
- }
- if (pos->cur_index >= pos->packet_real_index->len) {
- pos->offset = EOF;
- return;
- }
switch (whence) {
case SEEK_CUR:
{
if (pos->offset == EOF) {
return;
}
+ assert(pos->cur_index < pos->packet_cycles_index->len);
+ assert(pos->cur_index < pos->packet_real_index->len);
+
/* For printing discarded event count */
packet_index = &g_array_index(pos->packet_cycles_index,
struct packet_index, pos->cur_index);
break;
}
case SEEK_SET:
+ if (index >= pos->packet_cycles_index->len) {
+ pos->offset = EOF;
+ return;
+ }
packet_index = &g_array_index(pos->packet_cycles_index,
struct packet_index, index);
pos->last_events_discarded = packet_index->events_discarded;