X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=formats%2Fregistry.c;h=a6fd74b2bc5d3432ba0dae10eb0784753607e411;hp=6b28cbeb0b1cad5354fd64bb688bbf5e1b2aa750;hb=0860ab483ea602b4ac8f60a7634b54c3923da1e6;hpb=ccd7e1c86f36342b0b06651cc52df86bb663c271 diff --git a/formats/registry.c b/formats/registry.c index 6b28cbeb..a6fd74b2 100644 --- a/formats/registry.c +++ b/formats/registry.c @@ -16,8 +16,10 @@ * all copies or substantial portions of the Software. */ +#include #include #include +#include static int init_done; void __attribute__((constructor)) format_init(void); @@ -35,31 +37,50 @@ struct format *bt_lookup_format(GQuark qname) if (!init_done) return NULL; return g_hash_table_lookup(format_registry, - (gconstpointer) (unsigned long) qname) + (gconstpointer) (unsigned long) qname); } -int bt_register_format(const struct format *format) +static void show_format(gpointer key, gpointer value, gpointer user_data) +{ + FILE *fp = user_data; + + fprintf(fp, "format: %s\n", + g_quark_to_string((GQuark) (unsigned long) key)); +} + +void bt_fprintf_format_list(FILE *fp) +{ + fprintf(fp, "Formats available:\n"); + if (!init_done) + return; + g_hash_table_foreach(format_registry, show_format, fp); + fprintf(fp, "End of formats available.\n"); +} + +int bt_register_format(struct format *format) { if (!init_done) format_init(); - if (bt_lookup_format(qname)) + if (bt_lookup_format(format->name)) return -EEXIST; g_hash_table_insert(format_registry, - (gconstpointer) (unsigned long) format->name, + (gpointer) (unsigned long) format->name, format); return 0; } 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; } -int format_finalize(void) +void format_finalize(void) { g_hash_table_destroy(format_registry); }