From 6e341750dfbcf752e23f2eadb5072606e1a016d8 Mon Sep 17 00:00:00 2001 From: Xavier Claessens Date: Thu, 29 Sep 2022 08:16:47 -0400 Subject: [PATCH] g_str_equal: Provide macro for optimization g_str_equal() is a nicer API than strcmp()==0, and less error prone. However, forcing a function call prevents compiler from doing optimizations. In the case it is not used as callback to GHashTable, provide a macro that calls strcmp directly. This also has the side effect that it forces arguments to be `const char *` instead of `gconstpointer` in the case it is not used as callback, which adds type safety. Fixes: #2775 --- glib/ghash.c | 4 ++-- glib/ghash.h | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/glib/ghash.c b/glib/ghash.c index 5fb722c04..c6c334f41 100644 --- a/glib/ghash.c +++ b/glib/ghash.c @@ -2323,8 +2323,8 @@ g_hash_table_get_values (GHashTable *hash_table) * Returns: %TRUE if the two keys match */ gboolean -g_str_equal (gconstpointer v1, - gconstpointer v2) +(g_str_equal) (gconstpointer v1, + gconstpointer v2) { const gchar *string1 = v1; const gchar *string2 = v2; diff --git a/glib/ghash.h b/glib/ghash.h index cbd2f98bf..8e7f4a0d1 100644 --- a/glib/ghash.h +++ b/glib/ghash.h @@ -160,6 +160,10 @@ void g_hash_table_unref (GHashTable *hash_table); GLIB_AVAILABLE_IN_ALL gboolean g_str_equal (gconstpointer v1, gconstpointer v2); + +/* Macro for optimization in the case it is not used as callback function */ +#define g_str_equal(v1, v2) (strcmp ((v1), (v2)) == 0) + GLIB_AVAILABLE_IN_ALL guint g_str_hash (gconstpointer v);