Fix: bt_g_hash_table_contains(): handle `NULL`/0 values
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Thu, 23 Aug 2018 15:35:43 +0000 (11:35 -0400)
committerPhilippe Proulx <eeppeliteloop@gmail.com>
Thu, 2 May 2019 04:07:36 +0000 (00:07 -0400)
Issue
=====
g_hash_table_lookup() returns `NULL` if the key is not found, but also
when the value is actually `NULL` (or 0). Therefore
bt_g_hash_table_contains() returns false when there's actually a
`NULL`/0 value for the given key.

Solution
========
Use g_hash_table_lookup_extended() which truly returns whether or not
the given key was found, and discard the returned value.

Known drawbacks
===============
None.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
include/babeltrace/compat/glib-internal.h

index dd03b19c8faa934f0521a4302dd1fcc2fe17bf69..fd253559e3284f9c7af4a632c8ae5331837ba350 100644 (file)
@@ -40,14 +40,11 @@ bt_g_hash_table_contains(GHashTable *hash_table, gconstpointer key)
 static inline gboolean
 bt_g_hash_table_contains(GHashTable *hash_table, gconstpointer key)
 {
-       const char *value;
+       gpointer orig_key;
+       gpointer value;
 
-       value = g_hash_table_lookup(hash_table, key);
-       if (value == NULL) {
-               return FALSE;
-       }
-
-       return TRUE;
+       return g_hash_table_lookup_extended(hash_table, key, &orig_key,
+               &value);
 }
 
 #endif
This page took 0.02457 seconds and 4 git commands to generate.