X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=plugins%2Fctf%2Ffs%2Ffs.c;h=9019543eea6595268e81f0183eccd93b114bced4;hb=56a1ccedd4a58b6c87d1bbd94e22094ad5ac1a98;hp=3178c5c9da04714d661f72ec1a2b6e9d683ccf29;hpb=ea0b4b9e9695ab6df854b38d23773ab822a402d6;p=babeltrace.git diff --git a/plugins/ctf/fs/fs.c b/plugins/ctf/fs/fs.c index 3178c5c9..9019543e 100644 --- a/plugins/ctf/fs/fs.c +++ b/plugins/ctf/fs/fs.c @@ -27,37 +27,146 @@ */ #include +#include #include #include -#include "fs-internal.h" +#include +#include "fs.h" static bool ctf_fs_debug; static -struct ctf_fs_component *ctf_fs_create(struct bt_value *params) +struct bt_notification *ctf_fs_iterator_get( + struct bt_notification_iterator *iterator) { - return g_new0(struct ctf_fs_component, 1); + return NULL; } static -void ctf_fs_destroy(void *data) +enum bt_notification_iterator_status ctf_fs_iterator_next( + struct bt_notification_iterator *iterator) { - g_free(data); + return BT_NOTIFICATION_ITERATOR_STATUS_UNSUPPORTED; } -BT_HIDDEN +static +void ctf_fs_iterator_destroy_data(struct ctf_fs_iterator *ctf_it) +{ + g_free(ctf_it); +} + +static +void ctf_fs_iterator_destroy(struct bt_notification_iterator *it) +{ + void *data = bt_notification_iterator_get_private_data(it); + + ctf_fs_iterator_destroy_data(data); +} + +static enum bt_component_status ctf_fs_iterator_init(struct bt_component *source, struct bt_notification_iterator *it) { enum bt_component_status ret = BT_COMPONENT_STATUS_OK; + struct ctf_fs_iterator *ctf_it; assert(source && it); + ctf_it = g_new0(struct ctf_fs_iterator, 1); + if (!ctf_it) { + ret = BT_COMPONENT_STATUS_NOMEM; + goto end; + } + + ret = bt_notification_iterator_set_get_cb(it, ctf_fs_iterator_get); + if (ret) { + goto error; + } + + ret = bt_notification_iterator_set_next_cb(it, ctf_fs_iterator_next); + if (ret) { + goto error; + } + + ret = bt_notification_iterator_set_destroy_cb(it, + ctf_fs_iterator_destroy); + if (ret) { + goto error; + } + + ret = bt_notification_iterator_set_private_data(it, ctf_it); + if (ret) { + goto error; + } +end: return ret; +error: + (void) bt_notification_iterator_set_private_data(it, NULL); + ctf_fs_iterator_destroy_data(ctf_it); + return ret; +} + +static +void ctf_fs_destroy_data(struct ctf_fs_component *component) +{ + if (component->trace_path) { + g_string_free(component->trace_path, TRUE); + } + +// ctf_fs_metadata_fini(&component->metadata); +// ctf_fs_data_stream_fini(&component->data_stream); + g_free(component); +} + +static +void ctf_fs_destroy(struct bt_component *component) +{ + void *data = bt_component_get_private_data(component); + + ctf_fs_destroy_data(data); +} + +static +struct ctf_fs_component *ctf_fs_create(struct bt_value *params) +{ + struct ctf_fs_component *ctf_fs; + struct bt_value *value; + const char *path; + enum bt_value_status ret; + + ctf_fs = g_new0(struct ctf_fs_component, 1); + if (!ctf_fs) { + goto end; + } + + /* FIXME: should probably look for a source URI */ + value = bt_value_map_get(params, "path"); + if (!value || bt_value_is_null(value) || !bt_value_is_string(value)) { + goto error; + } + + ret = bt_value_string_get(value, &path); + if (ret != BT_VALUE_STATUS_OK) { + goto error; + } + + ctf_fs->trace_path = g_string_new(path); + if (!ctf_fs->trace_path) { + goto error; + } + + ctf_fs->error_fp = stderr; + ctf_fs->page_size = (size_t) getpagesize(); + +end: + return ctf_fs; +error: + ctf_fs_destroy_data(ctf_fs); + return ctf_fs; } BT_HIDDEN enum bt_component_status ctf_fs_init(struct bt_component *source, - struct bt_value *params) + struct bt_value *params) { struct ctf_fs_component *ctf_fs; enum bt_component_status ret = BT_COMPONENT_STATUS_OK; @@ -89,6 +198,6 @@ end: return ret; error: (void) bt_component_set_private_data(source, NULL); - ctf_fs_destroy(ctf_fs); + ctf_fs_destroy_data(ctf_fs); return ret; }