X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fplugins%2Fctf%2Ffs-src%2Fquery.cpp;h=3e9c2a676099ea103ed8c0b40c48888aea50e160;hb=c802cacb9f0879a42e01575595a75bbefe7d3db9;hp=5685ce79045553a991ed1443ab3531256023fd6a;hpb=1353b066072e6c389ff35853bac83f65597e7a6a;p=babeltrace.git diff --git a/src/plugins/ctf/fs-src/query.cpp b/src/plugins/ctf/fs-src/query.cpp index 5685ce79..3e9c2a67 100644 --- a/src/plugins/ctf/fs-src/query.cpp +++ b/src/plugins/ctf/fs-src/query.cpp @@ -6,25 +6,28 @@ * Babeltrace CTF file system Reader Component queries */ +#include +#include +#include +#include +#include +#include + +#include + #define BT_LOG_OUTPUT_LEVEL log_level #define BT_LOG_TAG "PLUGIN/SRC.CTF.FS/QUERY" +#include "logging/comp-logging.h" #include "logging/log.h" -#include "query.hpp" -#include -#include -#include -#include -#include -#include #include "common/assert.h" -#include "metadata.hpp" -#include "../common/metadata/decoder.hpp" #include "common/common.h" #include "common/macros.h" -#include + +#include "../common/metadata/decoder.hpp" #include "fs.hpp" -#include "logging/comp-logging.h" +#include "metadata.hpp" +#include "query.hpp" #define METADATA_TEXT_SIG "/* CTF 1.8" @@ -52,6 +55,8 @@ metadata_info_query(bt_self_component_class_source *self_comp_class_src, const b struct ctf_metadata_decoder *decoder = NULL; ctf_metadata_decoder_config decoder_cfg {}; enum ctf_metadata_decoder_status decoder_status; + GString *g_metadata_text = NULL; + const char *plaintext; result = bt_value_map_create(); if (!result) { @@ -85,7 +90,7 @@ metadata_info_query(bt_self_component_class_source *self_comp_class_src, const b path = bt_value_string_get(path_value); BT_ASSERT(path); - metadata_fp = ctf_fs_metadata_open_file(path); + metadata_fp = ctf_fs_metadata_open_file(path, log_level, self_comp_class); if (!metadata_fp) { BT_COMP_CLASS_LOGE_APPEND_CAUSE(self_comp_class, "Cannot open trace metadata: path=\"%s\".", path); @@ -118,7 +123,21 @@ metadata_info_query(bt_self_component_class_source *self_comp_class_src, const b goto error; } - ret = bt_value_map_insert_string_entry(result, "text", ctf_metadata_decoder_get_text(decoder)); + plaintext = ctf_metadata_decoder_get_text(decoder); + g_metadata_text = g_string_new(NULL); + + if (!g_metadata_text) { + goto error; + } + + if (strncmp(plaintext, METADATA_TEXT_SIG, sizeof(METADATA_TEXT_SIG) - 1) != 0) { + g_string_assign(g_metadata_text, METADATA_TEXT_SIG); + g_string_append(g_metadata_text, " */\n\n"); + } + + g_string_append(g_metadata_text, plaintext); + + ret = bt_value_map_insert_string_entry(result, "text", g_metadata_text->str); if (ret) { BT_COMP_CLASS_LOGE_APPEND_CAUSE(self_comp_class, "Cannot insert metadata text into query result."); @@ -143,6 +162,9 @@ error: } end: + if (g_metadata_text) { + g_string_free(g_metadata_text, TRUE); + } ctf_metadata_decoder_destroy(decoder); if (metadata_fp) { @@ -319,7 +341,7 @@ trace_infos_query(bt_self_component_class_source *self_comp_class_src, const bt_ goto error; } - ctf_fs = ctf_fs_component_create(log_level, NULL); + ctf_fs = ctf_fs_component_create(log_level); if (!ctf_fs) { goto error; }