X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=plugins%2Fctf%2Ffs-src%2Fmetadata.c;h=75043dc17842ba7e1563a91e6979e1249ac84365;hb=3fadfbc0c91f82c46bd36e6e0657ea93570c9db1;hp=18ecb0c598d1dc926280b3a2e565038226203263;hpb=7bf5af54b2e6cf5ed45f3416f96d837a120467ca;p=babeltrace.git diff --git a/plugins/ctf/fs-src/metadata.c b/plugins/ctf/fs-src/metadata.c index 18ecb0c5..75043dc1 100644 --- a/plugins/ctf/fs-src/metadata.c +++ b/plugins/ctf/fs-src/metadata.c @@ -27,10 +27,11 @@ #include #include #include -#include +#include #include -#include -#include +#include +#include +#include #include "fs.h" #include "file.h" @@ -43,29 +44,18 @@ BT_HIDDEN FILE *ctf_fs_metadata_open_file(const char *trace_path) { - GString *metadata_path = g_string_new(trace_path); + GString *metadata_path; FILE *fp = NULL; + metadata_path = g_string_new(trace_path); if (!metadata_path) { - goto error; + goto end; } - g_string_append(metadata_path, "/" CTF_FS_METADATA_FILENAME); + g_string_append(metadata_path, G_DIR_SEPARATOR_S CTF_FS_METADATA_FILENAME); fp = fopen(metadata_path->str, "rb"); - if (!fp) { - goto error; - } - - goto end; - -error: - if (fp) { - fclose(fp); - fp = NULL; - } - -end: g_string_free(metadata_path, TRUE); +end: return fp; } @@ -78,7 +68,7 @@ static struct ctf_fs_file *get_file(const char *trace_path) } g_string_append(file->path, trace_path); - g_string_append(file->path, "/" CTF_FS_METADATA_FILENAME); + g_string_append(file->path, G_DIR_SEPARATOR_S CTF_FS_METADATA_FILENAME); if (ctf_fs_file_open(file, "rb")) { goto error; @@ -96,15 +86,17 @@ end: return file; } -int ctf_fs_metadata_set_trace(struct ctf_fs_trace *ctf_fs_trace, +BT_HIDDEN +int ctf_fs_metadata_set_trace_class( + bt_self_component_source *self_comp, + struct ctf_fs_trace *ctf_fs_trace, struct ctf_fs_metadata_config *config) { int ret = 0; struct ctf_fs_file *file = NULL; - struct ctf_metadata_decoder *metadata_decoder = NULL; struct ctf_metadata_decoder_config decoder_config = { - .clock_class_offset_s = config->clock_class_offset_s, - .clock_class_offset_ns = config->clock_class_offset_ns, + .clock_class_offset_s = config ? config->clock_class_offset_s : 0, + .clock_class_offset_ns = config ? config->clock_class_offset_ns : 0, }; file = get_file(ctf_fs_trace->path->str); @@ -114,43 +106,54 @@ int ctf_fs_metadata_set_trace(struct ctf_fs_trace *ctf_fs_trace, goto end; } - metadata_decoder = ctf_metadata_decoder_create(&decoder_config, - ctf_fs_trace->name->str); - if (!metadata_decoder) { + ctf_fs_trace->metadata->decoder = ctf_metadata_decoder_create(self_comp, + config ? &decoder_config : NULL); + if (!ctf_fs_trace->metadata->decoder) { BT_LOGE("Cannot create metadata decoder object"); ret = -1; goto end; } - ret = ctf_metadata_decoder_decode(metadata_decoder, file->fp); + ret = ctf_metadata_decoder_decode(ctf_fs_trace->metadata->decoder, + file->fp); if (ret) { BT_LOGE("Cannot decode metadata file"); goto end; } - ctf_fs_trace->metadata->trace = ctf_metadata_decoder_get_trace( - metadata_decoder); - assert(ctf_fs_trace->metadata->trace); + ctf_fs_trace->metadata->trace_class = + ctf_metadata_decoder_get_ir_trace_class( + ctf_fs_trace->metadata->decoder); + BT_ASSERT(!self_comp || ctf_fs_trace->metadata->trace_class); + ctf_fs_trace->metadata->tc = + ctf_metadata_decoder_borrow_ctf_trace_class( + ctf_fs_trace->metadata->decoder); + BT_ASSERT(ctf_fs_trace->metadata->tc); end: ctf_fs_file_destroy(file); - ctf_metadata_decoder_destroy(metadata_decoder); return ret; } +BT_HIDDEN int ctf_fs_metadata_init(struct ctf_fs_metadata *metadata) { /* Nothing to initialize for the moment. */ return 0; } +BT_HIDDEN void ctf_fs_metadata_fini(struct ctf_fs_metadata *metadata) { if (metadata->text) { free(metadata->text); } - if (metadata->trace) { - BT_PUT(metadata->trace); + if (metadata->trace_class) { + BT_TRACE_CLASS_PUT_REF_AND_RESET(metadata->trace_class); + } + + if (metadata->decoder) { + ctf_metadata_decoder_destroy(metadata->decoder); } }