From 613f532b047a23c6916e2c08707b09296edbfcb2 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Fri, 17 Feb 2012 12:49:42 -0500 Subject: [PATCH] Fix API: allow packet_seek override Signed-off-by: Mathieu Desnoyers --- converter/babeltrace.c | 12 ++++++++---- include/babeltrace/context.h | 10 ++++++++-- lib/context.c | 6 ++++-- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/converter/babeltrace.c b/converter/babeltrace.c index 65220183..5bcfc2a7 100644 --- a/converter/babeltrace.c +++ b/converter/babeltrace.c @@ -307,14 +307,17 @@ end: * bt_context_add_traces_recursive: Open a trace recursively * * Find each trace present in the subdirectory starting from the given - * path, and add them to the context. + * path, and add them to the context. The packet_seek parameter can be + * NULL: this specify to use the default format packet_seek. * * Return: 0 on success, nonzero on failure. * Unable to open toplevel: failure. * Unable to open some subdirectory or file: warn and continue; */ int bt_context_add_traces_recursive(struct bt_context *ctx, const char *path, - const char *format_str) + const char *format_str, + void (*packet_seek)(struct stream_pos *pos, + size_t offset, int whence)) { FTS *tree; FTSENT *node; @@ -374,7 +377,8 @@ int bt_context_add_traces_recursive(struct bt_context *ctx, const char *path, } trace_id = bt_context_add_trace(ctx, - node->fts_accpath, format_str); + node->fts_accpath, format_str, + packet_seek); if (trace_id < 0) { fprintf(stderr, "[error] [Context] opening trace \"%s\" from %s " "for reading.\n", node->fts_accpath, path); @@ -481,7 +485,7 @@ int main(int argc, char **argv) ctx = bt_context_create(); ret = bt_context_add_traces_recursive(ctx, opt_input_path, - opt_input_format); + opt_input_format, NULL); if (ret) { fprintf(stderr, "[error] opening trace \"%s\" for reading.\n\n", opt_input_path); diff --git a/include/babeltrace/context.h b/include/babeltrace/context.h index 261c4d47..6190d37b 100644 --- a/include/babeltrace/context.h +++ b/include/babeltrace/context.h @@ -23,8 +23,11 @@ * included in all copies or substantial portions of the Software. */ +#include + /* struct bt_context is opaque to the user */ struct bt_context; +struct stream_pos; /* * bt_context_create : create a Babeltrace context @@ -39,13 +42,16 @@ struct bt_context *bt_context_create(void); /* * bt_context_add_trace : Add a trace by path to the context * - * Open a trace + * Open a trace. Parameter packet_seek can be NULL to use the default + * packet_seek handle of the format. * * Return: the trace handle id (>= 0) on success, a negative * value on error. */ int bt_context_add_trace(struct bt_context *ctx, const char *path, - const char *format); + const char *format, + void (*packet_seek)(struct stream_pos *pos, + size_t offset, int whence)); /* * bt_context_remove_trace: Remove a trace from the context. diff --git a/lib/context.c b/lib/context.c index e2c062aa..5021d7ad 100644 --- a/lib/context.c +++ b/lib/context.c @@ -57,7 +57,9 @@ struct bt_context *bt_context_create(void) } int bt_context_add_trace(struct bt_context *ctx, const char *path, - const char *format_name) + const char *format_name, + void (*packet_seek)(struct stream_pos *pos, + size_t offset, int whence)) { struct trace_descriptor *td; struct format *fmt; @@ -71,7 +73,7 @@ int bt_context_add_trace(struct bt_context *ctx, const char *path, ret = -1; goto end; } - td = fmt->open_trace(path, O_RDONLY, NULL, NULL); + td = fmt->open_trace(path, O_RDONLY, packet_seek, NULL); if (!td) { fprintf(stderr, "[error] [Context] Cannot open_trace of the format %s .\n\n", path); -- 2.34.1