projects
/
babeltrace.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add a private pointer to the ctf_stream_pos
[babeltrace.git]
/
include
/
babeltrace
/
ctf
/
types.h
diff --git
a/include/babeltrace/ctf/types.h
b/include/babeltrace/ctf/types.h
index 96c5083c2b7d5eea1e0154aa5954073353017139..06c130f80d8773a691b427479aa830020690b3ce 100644
(file)
--- a/
include/babeltrace/ctf/types.h
+++ b/
include/babeltrace/ctf/types.h
@@
-61,6
+61,7
@@
struct packet_index {
struct ctf_stream_pos {
struct bt_stream_pos parent;
int fd; /* backing file fd. -1 if unset. */
struct ctf_stream_pos {
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 */
GArray *packet_cycles_index; /* contains struct packet_index in cycles */
GArray *packet_real_index; /* contains struct packet_index in ns */
int prot; /* mmap protection */
@@
-82,6
+83,7
@@
struct ctf_stream_pos {
int dummy; /* dummy position, for length calculation */
struct bt_stream_callbacks *cb; /* Callbacks registered for iterator. */
int dummy; /* dummy position, for length calculation */
struct bt_stream_callbacks *cb; /* Callbacks registered for iterator. */
+ void *priv;
};
static inline
};
static inline
@@
-128,28
+130,41
@@
int ctf_fini_pos(struct ctf_stream_pos *pos);
/*
* move_pos - move position of a relative bit offset
*
/*
* move_pos - move position of a relative bit offset
*
+ * Return 1 if OK, 0 if out-of-bound.
+ *
* TODO: allow larger files by updating base too.
*/
static inline
* TODO: allow larger files by updating base too.
*/
static inline
-
void
ctf_move_pos(struct ctf_stream_pos *pos, uint64_t bit_offset)
+
int
ctf_move_pos(struct ctf_stream_pos *pos, uint64_t bit_offset)
{
{
+ uint64_t max_len;
+
printf_debug("ctf_move_pos test EOF: %" PRId64 "\n", pos->offset);
if (unlikely(pos->offset == EOF))
printf_debug("ctf_move_pos test EOF: %" PRId64 "\n", pos->offset);
if (unlikely(pos->offset == EOF))
- return;
+ return 0;
+ if (pos->prot == PROT_READ)
+ max_len = pos->content_size;
+ else
+ max_len = pos->packet_size;
+ if (unlikely(pos->offset + bit_offset > max_len))
+ return 0;
pos->offset += bit_offset;
printf_debug("ctf_move_pos after increment: %" PRId64 "\n", pos->offset);
pos->offset += bit_offset;
printf_debug("ctf_move_pos after increment: %" PRId64 "\n", pos->offset);
+ return 1;
}
/*
* align_pos - align position on a bit offset (> 0)
*
}
/*
* align_pos - align position on a bit offset (> 0)
*
+ * Return 1 if OK, 0 if out-of-bound.
+ *
* TODO: allow larger files by updating base too.
*/
static inline
* TODO: allow larger files by updating base too.
*/
static inline
-
void
ctf_align_pos(struct ctf_stream_pos *pos, uint64_t bit_offset)
+
int
ctf_align_pos(struct ctf_stream_pos *pos, uint64_t bit_offset)
{
{
- ctf_move_pos(pos, offset_align(pos->offset, bit_offset));
+
return
ctf_move_pos(pos, offset_align(pos->offset, bit_offset));
}
static inline
}
static inline
@@
-190,15
+205,21
@@
void ctf_pos_pad_packet(struct ctf_stream_pos *pos)
static inline
int ctf_pos_access_ok(struct ctf_stream_pos *pos, uint64_t bit_len)
{
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 (unlikely(pos->offset == EOF))
return 0;
- if (unlikely(pos->offset + bit_len > pos->packet_size))
+ if (pos->prot == PROT_READ)
+ max_len = pos->content_size;
+ else
+ max_len = pos->packet_size;
+ if (unlikely(pos->offset + bit_len > max_len))
return 0;
return 1;
}
/*
return 0;
return 1;
}
/*
- * 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
* the next packet if we are located at the end of the current packet.
*/
static inline
This page took
0.024666 seconds
and
4
git commands to generate.