capture: add sp_capture_reader_peek_frame()

It can be useful to peek at the whole frame header (for things like time
or pid or cpu).
This commit is contained in:
Christian Hergert
2016-04-15 04:48:46 -07:00
parent ad5f855a2b
commit 253b387323
2 changed files with 27 additions and 9 deletions

View File

@ -277,26 +277,42 @@ sp_capture_reader_skip (SpCaptureReader *self)
} }
gboolean gboolean
sp_capture_reader_peek_type (SpCaptureReader *self, sp_capture_reader_peek_frame (SpCaptureReader *self,
SpCaptureFrameType *type) SpCaptureFrame *frame)
{ {
SpCaptureFrame *frame; SpCaptureFrame *real_frame;
g_assert (self != NULL); g_assert (self != NULL);
g_assert ((self->pos % SP_CAPTURE_ALIGN) == 0); g_assert ((self->pos % SP_CAPTURE_ALIGN) == 0);
g_assert (self->pos <= self->bufsz); g_assert (self->pos <= self->bufsz);
g_assert (type != NULL);
*type = 0; if (!sp_capture_reader_ensure_space_for (self, sizeof *real_frame))
if (!sp_capture_reader_ensure_space_for (self, sizeof *frame))
return FALSE; return FALSE;
g_assert ((self->pos % SP_CAPTURE_ALIGN) == 0); g_assert ((self->pos % SP_CAPTURE_ALIGN) == 0);
frame = (SpCaptureFrame *)(gpointer)&self->buf[self->pos]; real_frame = (SpCaptureFrame *)(gpointer)&self->buf[self->pos];
*type = frame->type; *frame = *real_frame;
sp_capture_reader_bswap_frame (self, frame);
return TRUE;
}
gboolean
sp_capture_reader_peek_type (SpCaptureReader *self,
SpCaptureFrameType *type)
{
SpCaptureFrame frame;
g_assert (self != NULL);
g_assert (type != NULL);
if (!sp_capture_reader_peek_frame (self, &frame))
return FALSE;
*type = frame.type;
return TRUE; return TRUE;
} }

View File

@ -37,6 +37,8 @@ gint64 sp_capture_reader_get_start_time (SpCapt
gboolean sp_capture_reader_skip (SpCaptureReader *self); gboolean sp_capture_reader_skip (SpCaptureReader *self);
gboolean sp_capture_reader_peek_type (SpCaptureReader *self, gboolean sp_capture_reader_peek_type (SpCaptureReader *self,
SpCaptureFrameType *type); SpCaptureFrameType *type);
gboolean sp_capture_reader_peek_frame (SpCaptureReader *self,
SpCaptureFrame *frame);
const SpCaptureMap *sp_capture_reader_read_map (SpCaptureReader *self); const SpCaptureMap *sp_capture_reader_read_map (SpCaptureReader *self);
const SpCaptureExit *sp_capture_reader_read_exit (SpCaptureReader *self); const SpCaptureExit *sp_capture_reader_read_exit (SpCaptureReader *self);
const SpCaptureFork *sp_capture_reader_read_fork (SpCaptureReader *self); const SpCaptureFork *sp_capture_reader_read_fork (SpCaptureReader *self);