-int ctf_integer_read(struct stream_pos *pos, struct definition *definition);
-int ctf_integer_write(struct stream_pos *pos, struct definition *definition);
-int ctf_float_read(struct stream_pos *pos, struct definition *definition);
-int ctf_float_write(struct stream_pos *pos, struct definition *definition);
-int ctf_string_read(struct stream_pos *pos, struct definition *definition);
-int ctf_string_write(struct stream_pos *pos, struct definition *definition);
-int ctf_enum_read(struct stream_pos *pos, struct definition *definition);
-int ctf_enum_write(struct stream_pos *pos, struct definition *definition);
-int ctf_struct_rw(struct stream_pos *pos, struct definition *definition);
-int ctf_variant_rw(struct stream_pos *pos, struct definition *definition);
-int ctf_array_read(struct stream_pos *pos, struct definition *definition);
-int ctf_array_write(struct stream_pos *pos, struct definition *definition);
-int ctf_sequence_read(struct stream_pos *pos, struct definition *definition);
-int ctf_sequence_write(struct stream_pos *pos, struct definition *definition);
-
-void ctf_move_pos_slow(struct ctf_stream_pos *pos, size_t offset, int whence);
-
-void ctf_init_pos(struct ctf_stream_pos *pos, int fd, int open_flags);
-void ctf_fini_pos(struct ctf_stream_pos *pos);
+BT_HIDDEN
+int ctf_integer_read(struct bt_stream_pos *pos, struct bt_definition *definition);
+BT_HIDDEN
+int ctf_integer_write(struct bt_stream_pos *pos, struct bt_definition *definition);
+BT_HIDDEN
+int ctf_float_read(struct bt_stream_pos *pos, struct bt_definition *definition);
+BT_HIDDEN
+int ctf_float_write(struct bt_stream_pos *pos, struct bt_definition *definition);
+BT_HIDDEN
+int ctf_string_read(struct bt_stream_pos *pos, struct bt_definition *definition);
+BT_HIDDEN
+int ctf_string_write(struct bt_stream_pos *pos, struct bt_definition *definition);
+BT_HIDDEN
+int ctf_enum_read(struct bt_stream_pos *pos, struct bt_definition *definition);
+BT_HIDDEN
+int ctf_enum_write(struct bt_stream_pos *pos, struct bt_definition *definition);
+BT_HIDDEN
+int ctf_struct_rw(struct bt_stream_pos *pos, struct bt_definition *definition);
+BT_HIDDEN
+int ctf_variant_rw(struct bt_stream_pos *pos, struct bt_definition *definition);
+BT_HIDDEN
+int ctf_array_read(struct bt_stream_pos *pos, struct bt_definition *definition);
+BT_HIDDEN
+int ctf_array_write(struct bt_stream_pos *pos, struct bt_definition *definition);
+BT_HIDDEN
+int ctf_sequence_read(struct bt_stream_pos *pos, struct bt_definition *definition);
+BT_HIDDEN
+int ctf_sequence_write(struct bt_stream_pos *pos, struct bt_definition *definition);
+
+void ctf_packet_seek(struct bt_stream_pos *pos, size_t index, int whence);
+
+int ctf_init_pos(struct ctf_stream_pos *pos, struct bt_trace_descriptor *trace,
+ int fd, int open_flags);
+int ctf_fini_pos(struct ctf_stream_pos *pos);
+
+static inline
+int ctf_pos_access_ok(struct ctf_stream_pos *pos, uint64_t bit_len)
+{
+ uint64_t max_len;
+
+ if (unlikely(pos->offset == EOF))
+ return 0;
+ if (pos->prot == PROT_READ) {
+ /*
+ * Reads may only reach up to the "content_size",
+ * regardless of the packet_size.
+ */
+ max_len = pos->content_size;
+ } else {
+ /* Writes may take place up to the end of the packet. */
+ max_len = pos->packet_size;
+ }
+ if (unlikely(pos->offset + bit_len > max_len))
+ return 0;
+ return 1;
+}