X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=formats%2Fregistry.c;h=829ede9da77bf12dce5da544e3ea0bb3538a8049;hp=4f9dc244a3618451c54e0f4265563d0a7a0bc739;hb=d6425aaf6026d168a695268c4aa7539956c0d0ca;hpb=4c8bfb7e0a9cef6e74cefa38ed54bf8cbd424183 diff --git a/formats/registry.c b/formats/registry.c index 4f9dc244..829ede9d 100644 --- a/formats/registry.c +++ b/formats/registry.c @@ -3,7 +3,9 @@ * * Format Registry * - * Copyright 2010 - Mathieu Desnoyers + * Copyright 2010-2011 EfficiOS Inc. and Linux Foundation + * + * Author: Mathieu Desnoyers * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -19,6 +21,13 @@ #include #include #include +#include +#include + +struct walk_data { + FILE *fp; + int iter; +}; static int init_done; void __attribute__((constructor)) format_init(void); @@ -31,12 +40,37 @@ void __attribute__((destructor)) format_finalize(void); */ GHashTable *format_registry; -struct format *bt_lookup_format(GQuark qname) +struct format *bt_lookup_format(bt_intern_str name) { if (!init_done) return NULL; return g_hash_table_lookup(format_registry, - (gconstpointer) (unsigned long) qname); + (gconstpointer) (unsigned long) name); +} + +static void show_format(gpointer key, gpointer value, gpointer user_data) +{ + struct walk_data *data = user_data; + + fprintf(data->fp, "%s%s", data->iter ? ", " : "", + g_quark_to_string((GQuark) (unsigned long) key)); + data->iter++; +} + +void bt_fprintf_format_list(FILE *fp) +{ + struct walk_data data; + + data.fp = fp; + data.iter = 0; + + fprintf(fp, "Formats available: "); + if (!init_done) + return; + g_hash_table_foreach(format_registry, show_format, &data); + if (data.iter == 0) + fprintf(fp, ""); + fprintf(fp, ".\n"); } int bt_register_format(struct format *format) @@ -55,6 +89,8 @@ int bt_register_format(struct format *format) void format_init(void) { + if (init_done) + return; format_registry = g_hash_table_new(g_direct_hash, g_direct_equal); assert(format_registry); init_done = 1;