Do something less catastrophic than crashing if the same name is used in
authorguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>
Mon, 2 Dec 2013 08:51:46 +0000 (08:51 +0000)
committerguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>
Mon, 2 Dec 2013 08:51:46 +0000 (08:51 +0000)
two codec registrations.

git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@53711 f5534014-38df-0310-8fa8-9805f1628bb7

codecs/codecs.c
codecs/codecs.h

index abe3eaa71435b6e4d5cb4df2502d3f79d0891216..1843ba36fd632fcdfc54ca54887c3c659c08f4fa 100644 (file)
@@ -119,19 +119,18 @@ find_codec(const char *name)
 }
 
 /* Register a codec by name. */
-void
+gboolean
 register_codec(const char *name, codec_init_fn init_fn, codec_release_fn release_fn, codec_decode_fn decode_fn)
 {
        struct codec_handle *handle;
 
        /* Create our hash table if it doesn't already exist */
-       if (registered_codecs == NULL) {
+       if (registered_codecs == NULL)
                registered_codecs = g_hash_table_new(g_str_hash, g_str_equal);
-               g_assert(registered_codecs != NULL);
-       }
 
        /* Make sure the registration is unique */
-       g_assert(g_hash_table_lookup(registered_codecs, name) == NULL);
+       if (g_hash_table_lookup(registered_codecs, name) != NULL)
+               return FALSE;   /* report an error, or have our caller do it? */
 
        handle = (struct codec_handle *)g_malloc(sizeof (struct codec_handle));
        handle->name = name;
@@ -140,6 +139,7 @@ register_codec(const char *name, codec_init_fn init_fn, codec_release_fn release
        handle->decode_fn = decode_fn;
 
        g_hash_table_insert(registered_codecs, (gpointer)name, (gpointer) handle);
+       return TRUE;
 }
 
 void *codec_init(codec_handle_t codec)
index f293e26f2d177d6efae8238830a5c65576673e99..6093b5559c3061d511af9778946be04e2ee8a1dc 100644 (file)
@@ -46,7 +46,7 @@ typedef void *(*codec_init_fn)(void);
 typedef void (*codec_release_fn)(void *context);
 typedef int (*codec_decode_fn)(void *context, const void *input, int inputSizeBytes, void *output, int *outputSizeBytes);
 
-extern void register_codec(const char *name, codec_init_fn init_fn, codec_release_fn release_fn, codec_decode_fn decode_fn);
+extern gboolean register_codec(const char *name, codec_init_fn init_fn, codec_release_fn release_fn, codec_decode_fn decode_fn);
 extern codec_handle_t find_codec(const char *name);
 extern void *codec_init(codec_handle_t codec);
 extern void codec_release(codec_handle_t codec, void *context);