+
+BT_HIDDEN
+enum bt_ctf_notif_iter_status bt_ctf_notif_iter_seek(
+ struct bt_ctf_notif_iter *notit, off_t offset)
+{
+ enum bt_ctf_notif_iter_status ret = BT_CTF_NOTIF_ITER_STATUS_OK;
+ enum bt_ctf_notif_iter_medium_status medium_status;
+
+ assert(notit);
+ if (offset < 0) {
+ BT_LOGE("Cannot seek to negative offset: offset=%jd", offset);
+ ret = BT_CTF_NOTIF_ITER_STATUS_INVAL;
+ goto end;
+ }
+
+ if (!notit->medium.medops.seek) {
+ ret = BT_CTF_NOTIF_ITER_STATUS_UNSUPPORTED;
+ BT_LOGD("Aborting seek as the iterator's underlying media does not implement seek support.");
+ goto end;
+ }
+
+ medium_status = notit->medium.medops.seek(
+ BT_CTF_NOTIF_ITER_SEEK_WHENCE_SET, offset,
+ notit->medium.data);
+ if (medium_status != BT_CTF_NOTIF_ITER_MEDIUM_STATUS_OK) {
+ if (medium_status == BT_CTF_NOTIF_ITER_MEDIUM_STATUS_EOF) {
+ ret = BT_CTF_NOTIF_ITER_STATUS_EOF;
+ } else {
+ ret = BT_CTF_NOTIF_ITER_STATUS_ERROR;
+ goto end;
+ }
+ }
+
+ bt_ctf_notif_iter_reset(notit);
+ notit->cur_packet_offset = offset;
+end:
+ return ret;
+}
+
+BT_HIDDEN
+off_t bt_ctf_notif_iter_get_current_packet_offset(
+ struct bt_ctf_notif_iter *notit)
+{
+ assert(notit);
+ return notit->cur_packet_offset;
+}
+
+BT_HIDDEN
+off_t bt_ctf_notif_iter_get_current_packet_size(
+ struct bt_ctf_notif_iter *notit)
+{
+ assert(notit);
+ return notit->cur_packet_size;
+}