In preparation for incremental metadata parsing.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
static
int ctf_open_trace_metadata_read(struct ctf_trace *td,
void (*packet_seek)(struct bt_stream_pos *pos, size_t index,
static
int ctf_open_trace_metadata_read(struct ctf_trace *td,
void (*packet_seek)(struct bt_stream_pos *pos, size_t index,
- int whence), FILE *metadata_fp)
+ int whence), FILE *metadata_fp,
+ struct ctf_scanner *scanner)
- struct ctf_scanner *scanner;
struct ctf_file_stream *metadata_stream;
FILE *fp;
char *buf = NULL;
struct ctf_file_stream *metadata_stream;
FILE *fp;
char *buf = NULL;
if (ret) {
/* Warn about empty metadata */
fprintf(stderr, "[warning] Empty metadata.\n");
if (ret) {
/* Warn about empty metadata */
fprintf(stderr, "[warning] Empty metadata.\n");
}
td->metadata_string = buf;
td->metadata_packetized = 1;
}
td->metadata_string = buf;
td->metadata_packetized = 1;
fprintf(stderr, "[warning] Ill-shapen or missing \"/* CTF x.y\" header for text-only metadata.\n");
if (check_version(major, minor) < 0) {
ret = -EINVAL;
fprintf(stderr, "[warning] Ill-shapen or missing \"/* CTF x.y\" header for text-only metadata.\n");
if (check_version(major, minor) < 0) {
ret = -EINVAL;
- scanner = ctf_scanner_alloc();
- if (!scanner) {
- fprintf(stderr, "[error] Error allocating scanner\n");
- ret = -ENOMEM;
- goto end_scanner_alloc;
- }
ret = ctf_scanner_append_ast(scanner, fp);
if (ret) {
fprintf(stderr, "[error] Error creating AST\n");
ret = ctf_scanner_append_ast(scanner, fp);
if (ret) {
fprintf(stderr, "[error] Error creating AST\n");
- ctf_scanner_free(scanner);
-end_scanner_alloc:
-end_packet_read:
if (fp) {
closeret = fclose(fp);
if (closeret) {
if (fp) {
closeret = fclose(fp);
if (closeret) {
void (*packet_seek)(struct bt_stream_pos *pos, size_t index,
int whence), FILE *metadata_fp)
{
void (*packet_seek)(struct bt_stream_pos *pos, size_t index,
int whence), FILE *metadata_fp)
{
+ struct ctf_scanner *scanner;
int ret, closeret;
struct dirent *dirent;
struct dirent *diriter;
int ret, closeret;
struct dirent *dirent;
struct dirent *diriter;
/*
* Keep the metadata file separate.
*/
/*
* Keep the metadata file separate.
*/
-
- ret = ctf_open_trace_metadata_read(td, packet_seek, metadata_fp);
+ scanner = ctf_scanner_alloc();
+ if (!scanner) {
+ fprintf(stderr, "[error] Error allocating scanner\n");
+ ret = -ENOMEM;
+ goto error_metadata;
+ }
+ ret = ctf_open_trace_metadata_read(td, packet_seek, metadata_fp,
+ scanner);
+ ctf_scanner_free(scanner);
if (ret) {
fprintf(stderr, "[warning] Unable to open trace metadata for path \"%s\".\n", path);
goto error_metadata;
if (ret) {
fprintf(stderr, "[warning] Unable to open trace metadata for path \"%s\".\n", path);
goto error_metadata;
{
int ret;
struct bt_mmap_stream *mmap_info;
{
int ret;
struct bt_mmap_stream *mmap_info;
+ struct ctf_scanner *scanner;
- ret = ctf_open_trace_metadata_read(td, ctf_packet_seek, metadata_fp);
+ scanner = ctf_scanner_alloc();
+ if (!scanner) {
+ fprintf(stderr, "[error] Error allocating scanner\n");
+ ret = -ENOMEM;
+ goto error_scanner_alloc;
+ }
+ ret = ctf_open_trace_metadata_read(td, ctf_packet_seek, metadata_fp,
+ scanner);
+ ctf_scanner_free(scanner);
+ ctf_scanner_free(scanner);
+error_scanner_alloc: