From d01e0f33ea0abad95b6e85a4d73c9395243ed06b Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Mon, 5 Sep 2016 17:16:57 -0400 Subject: [PATCH] Implement ctf fs iterator functions MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérémie Galarneau --- .../babeltrace/plugin/notification/iterator.h | 14 ++--- plugins/ctf/fs/fs.c | 62 ++++++++++++++++++- plugins/ctf/fs/fs.h | 2 +- 3 files changed, 65 insertions(+), 13 deletions(-) diff --git a/include/babeltrace/plugin/notification/iterator.h b/include/babeltrace/plugin/notification/iterator.h index 5558aa7f..55de0ea0 100644 --- a/include/babeltrace/plugin/notification/iterator.h +++ b/include/babeltrace/plugin/notification/iterator.h @@ -40,21 +40,15 @@ struct bt_notification_iterator; * Status code. Errors are always negative. */ enum bt_notification_iterator_status { + /** No error, okay. */ + BT_NOTIFICATION_ITERATOR_STATUS_OK = 0, /** Invalid arguments. */ - /* -22 for compatibility with -EINVAL */ - BT_NOTIFICATION_ITERATOR_STATUS_INVAL = -22, - - /** End of trace. */ - BT_NOTIFICATION_ITERATOR_STATUS_EOT = -3, - + BT_NOTIFICATION_ITERATOR_STATUS_INVAL = -1, /** General error. */ BT_NOTIFICATION_ITERATOR_STATUS_ERROR = -2, - /** Unsupported iterator feature. */ - BT_NOTIFICATION_ITERATOR_STATUS_UNSUPPORTED = -1, + BT_NOTIFICATION_ITERATOR_STATUS_UNSUPPORTED = -3, - /** No error, okay. */ - BT_NOTIFICATION_ITERATOR_STATUS_OK = 0, }; /** diff --git a/plugins/ctf/fs/fs.c b/plugins/ctf/fs/fs.c index adc1b30d..2c0ca58e 100644 --- a/plugins/ctf/fs/fs.c +++ b/plugins/ctf/fs/fs.c @@ -41,14 +41,71 @@ static struct bt_notification *ctf_fs_iterator_get( struct bt_notification_iterator *iterator) { - return NULL; + struct bt_notification *notification = NULL; + struct ctf_fs_component *ctf_fs; + struct bt_component *component = bt_notification_iterator_get_component( + iterator); + + if (!component) { + goto end; + } + + ctf_fs = bt_component_get_private_data(component); + if (!ctf_fs) { + goto end; + } + + notification = bt_get(ctf_fs->current_notification); +end: + return notification; } static enum bt_notification_iterator_status ctf_fs_iterator_next( struct bt_notification_iterator *iterator) { - return BT_NOTIFICATION_ITERATOR_STATUS_UNSUPPORTED; + enum bt_notification_iterator_status ret; + struct bt_ctf_notif_iter_notif *notification; +// struct bt_notification *notification = NULL; + struct ctf_fs_component *ctf_fs; + struct bt_component *component = bt_notification_iterator_get_component( + iterator); + + if (!component) { + ret = BT_NOTIFICATION_ITERATOR_STATUS_ERROR; + goto end; + } + + ret = ctf_fs_data_stream_get_next_notification(ctf_fs, ¬ification); + if (ret || !notification) { + goto end; + } + + switch (notification->type) { + case BT_CTF_NOTIF_ITER_NOTIF_NEW_PACKET: + { + struct bt_ctf_notif_iter_notif_new_packet *notif = + (struct bt_ctf_notif_iter_notif_new_packet *) notification; + break; + } + case BT_CTF_NOTIF_ITER_NOTIF_EVENT: + { + struct bt_ctf_notif_iter_notif_event *notif = + (struct bt_ctf_notif_iter_notif_event *) notification; + break; + } + case BT_CTF_NOTIF_ITER_NOTIF_END_OF_PACKET: + { + struct bt_ctf_notif_iter_notif_end_of_packet *notif = + (struct bt_ctf_notif_iter_notif_end_of_packet *) notification; + break; + } + default: + break; + } + +end: + return ret; } static @@ -116,6 +173,7 @@ void ctf_fs_destroy_data(struct ctf_fs_component *component) ctf_fs_metadata_fini(&component->metadata); ctf_fs_data_stream_fini(&component->data_stream); + BT_PUT(component->current_notification); g_free(component); } diff --git a/plugins/ctf/fs/fs.h b/plugins/ctf/fs/fs.h index 7a67b48a..e568ddd5 100644 --- a/plugins/ctf/fs/fs.h +++ b/plugins/ctf/fs/fs.h @@ -78,7 +78,7 @@ struct ctf_fs_component { GString *trace_path; FILE *error_fp; size_t page_size; - struct bt_notification *last_notif; + struct bt_notification *current_notification; struct ctf_fs_metadata metadata; struct ctf_fs_data_stream data_stream; struct ctf_fs_component_options options; -- 2.34.1