*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
*/
#include <babeltrace/types.h>
* Always update ctf_stream_pos with ctf_move_pos and ctf_init_pos.
*/
struct ctf_stream_pos {
- struct stream_pos parent;
+ struct bt_stream_pos parent;
int fd; /* backing file fd. -1 if unset. */
+ FILE *index_fp; /* backing index file fp. NULL if unset. */
GArray *packet_cycles_index; /* contains struct packet_index in cycles */
GArray *packet_real_index; /* contains struct packet_index in ns */
int prot; /* mmap protection */
int64_t last_offset; /* offset before the last read_event */
uint64_t cur_index; /* current index in packet index */
uint64_t last_events_discarded; /* last known amount of event discarded */
- void (*packet_seek)(struct stream_pos *pos, size_t index,
+ void (*packet_seek)(struct bt_stream_pos *pos, size_t index,
int whence); /* function called to switch packet */
int dummy; /* dummy position, for length calculation */
};
static inline
-struct ctf_stream_pos *ctf_pos(struct stream_pos *pos)
+struct ctf_stream_pos *ctf_pos(struct bt_stream_pos *pos)
{
return container_of(pos, struct ctf_stream_pos, parent);
}
-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_packet_seek(struct stream_pos *pos, size_t index, 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);
/*
* move_pos - move position of a relative bit offset
if (unlikely(pos->offset == EOF))
return;
- if (pos->fd >= 0) {
- /*
- * PROT_READ ctf_packet_seek is called from within
- * ctf_pos_get_event so end of packet does not change
- * the packet context on for the last event of the
- * packet.
- */
- if ((pos->prot == PROT_WRITE)
- && (unlikely(pos->offset + bit_offset >= pos->packet_size))) {
- printf_debug("ctf_packet_seek (before call): %" PRId64 "\n",
- pos->offset);
- ctf_packet_seek(&pos->parent, 0, SEEK_CUR);
- printf_debug("ctf_packet_seek (after call): %" PRId64 "\n",
- pos->offset);
- return;
- }
- }
pos->offset += bit_offset;
printf_debug("ctf_move_pos after increment: %" PRId64 "\n", pos->offset);
}
static inline
void ctf_pos_pad_packet(struct ctf_stream_pos *pos)
{
- ctf_move_pos(pos, pos->packet_size - pos->offset);
+ ctf_packet_seek(&pos->parent, 0, SEEK_CUR);
}
static inline
}
/*
- * Update the stream position for to the current event. This moves to
+ * Update the stream position to the current event. This moves to
* the next packet if we are located at the end of the current packet.
*/
static inline