X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=plugins%2Fctf%2Ffs-src%2Fmetadata.c;h=75043dc17842ba7e1563a91e6979e1249ac84365;hb=3fadfbc0c91f82c46bd36e6e0657ea93570c9db1;hp=cd2119610693401dfb76f8061613496a1a86a0c8;hpb=d8866baa7f1ae173ac9d9fac0ad55cb28f883cbf;p=babeltrace.git diff --git a/plugins/ctf/fs-src/metadata.c b/plugins/ctf/fs-src/metadata.c index cd211961..75043dc1 100644 --- a/plugins/ctf/fs-src/metadata.c +++ b/plugins/ctf/fs-src/metadata.c @@ -27,64 +27,50 @@ #include #include #include -#include +#include #include -#include -#include - -#define PRINT_ERR_STREAM ctf_fs->error_fp -#define PRINT_PREFIX "ctf-fs-metadata" -#include "print.h" +#include +#include +#include #include "fs.h" #include "file.h" #include "metadata.h" #include "../common/metadata/decoder.h" -#define NSEC_PER_SEC 1000000000LL +#define BT_LOG_TAG "PLUGIN-CTF-FS-METADATA-SRC" +#include "logging.h" 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; } -static struct ctf_fs_file *get_file(struct ctf_fs_component *ctf_fs, - const char *trace_path) +static struct ctf_fs_file *get_file(const char *trace_path) { - struct ctf_fs_file *file = ctf_fs_file_create(ctf_fs); + struct ctf_fs_file *file = ctf_fs_file_create(); if (!file) { goto error; } 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(ctf_fs, file, "rb")) { + if (ctf_fs_file_open(file, "rb")) { goto error; } @@ -100,55 +86,74 @@ end: return file; } -int ctf_fs_metadata_set_trace(struct ctf_fs_component *ctf_fs) +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 ? config->clock_class_offset_s : 0, + .clock_class_offset_ns = config ? config->clock_class_offset_ns : 0, + }; - file = get_file(ctf_fs, ctf_fs->trace_path->str); + file = get_file(ctf_fs_trace->path->str); if (!file) { - PERR("Cannot create metadata file object\n"); + BT_LOGE("Cannot create metadata file object"); + ret = -1; goto end; } - metadata_decoder = ctf_metadata_decoder_create(ctf_fs->error_fp, - ctf_fs->options.clock_offset * NSEC_PER_SEC + - ctf_fs->options.clock_offset_ns); - if (!metadata_decoder) { - PERR("Cannot create metadata decoder object\n"); + 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) { - PERR("Cannot decode metadata file\n"); + BT_LOGE("Cannot decode metadata file"); goto end; } - ctf_fs->metadata->trace = ctf_metadata_decoder_get_trace( - metadata_decoder); - assert(ctf_fs->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); } }