src.text.dmesg: implement "seek beginning" and "can seek beginning" methods
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Tue, 19 Feb 2019 16:59:26 +0000 (11:59 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 3 May 2019 22:19:38 +0000 (18:19 -0400)
It is possible to make a `src.text.dmesg` message iterator seek its
beginning when it's reading a file, not the standard input. Its "can
seek beginning" method indicates this.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
plugins/text/dmesg/dmesg.c
plugins/text/dmesg/dmesg.h
plugins/text/plugin.c

index 90d1d634b3b3330ec7fd9a357bce9ad6f676e171..29cef2f59d1e782f0c2565ca76f665e035ace1d8 100644 (file)
@@ -647,6 +647,8 @@ void destroy_dmesg_msg_iter(struct dmesg_msg_iter *dmesg_msg_iter)
        g_free(dmesg_msg_iter);
 }
 
+
+
 BT_HIDDEN
 bt_self_message_iterator_status dmesg_msg_iter_init(
                bt_self_message_iterator *self_msg_iter,
@@ -897,3 +899,29 @@ bt_self_message_iterator_status dmesg_msg_iter_next(
 
        return status;
 }
+
+BT_HIDDEN
+bt_bool dmesg_msg_iter_can_seek_beginning(
+               bt_self_message_iterator *self_msg_iter)
+{
+       struct dmesg_msg_iter *dmesg_msg_iter =
+               bt_self_message_iterator_get_data(self_msg_iter);
+
+       /* Can't seek the beginning of the standard input stream */
+       return !dmesg_msg_iter->dmesg_comp->params.read_from_stdin;
+}
+
+BT_HIDDEN
+bt_self_message_iterator_status dmesg_msg_iter_seek_beginning(
+               bt_self_message_iterator *self_msg_iter)
+{
+       struct dmesg_msg_iter *dmesg_msg_iter =
+               bt_self_message_iterator_get_data(self_msg_iter);
+
+       BT_ASSERT(!dmesg_msg_iter->dmesg_comp->params.read_from_stdin);
+
+       BT_MESSAGE_PUT_REF_AND_RESET(dmesg_msg_iter->tmp_event_msg);
+       dmesg_msg_iter->last_clock_value = 0;
+       dmesg_msg_iter->state = STATE_EMIT_STREAM_BEGINNING;
+       return BT_SELF_MESSAGE_ITERATOR_STATUS_OK;
+}
index 73d26d2f1cc7dc1e01506c198e3ff41f2e188761..f93eeaf3df88bc710971200680ddf3ee58eeb657 100644 (file)
@@ -51,4 +51,12 @@ bt_self_message_iterator_status dmesg_msg_iter_next(
                bt_message_array_const msgs, uint64_t capacity,
                uint64_t *count);
 
+BT_HIDDEN
+bt_bool dmesg_msg_iter_can_seek_beginning(
+               bt_self_message_iterator *message_iterator);
+
+BT_HIDDEN
+bt_self_message_iterator_status dmesg_msg_iter_seek_beginning(
+               bt_self_message_iterator *message_iterator);
+
 #endif /* BABELTRACE_PLUGIN_TEXT_DMESG_DMESG_H */
index 41da4395214a23f0e5d1506101ad47298abf8815..55507de5e11b7f191f5dadf158bbb623c3d2d36e 100644 (file)
@@ -52,3 +52,7 @@ BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD(dmesg,
        dmesg_msg_iter_init);
 BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_FINALIZE_METHOD(dmesg,
        dmesg_msg_iter_finalize);
+BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_SEEK_BEGINNING_METHOD(dmesg,
+       dmesg_msg_iter_seek_beginning);
+BT_PLUGIN_SOURCE_COMPONENT_CLASS_MESSAGE_ITERATOR_CAN_SEEK_BEGINNING_METHOD(dmesg,
+       dmesg_msg_iter_can_seek_beginning);
This page took 0.025995 seconds and 4 git commands to generate.