diff --git a/glib/gdataset.c b/glib/gdataset.c index 661c30f3c..c2582b937 100644 --- a/glib/gdataset.c +++ b/glib/gdataset.c @@ -776,16 +776,6 @@ g_dataset_id_get_data (gconstpointer dataset_location, * * Retrieves the data element corresponding to @key_id. **/ -/** - * g_datalist_get_data: - * @dl: a datalist. - * @k: the string identifying a data element. - * @Returns: the data element, or %NULL if it is not found. - * - * Gets a data element, using its string identifer. This is slower than - * g_datalist_id_get_data() because the string is first converted to a - * #GQuark. - **/ gpointer g_datalist_id_get_data (GData **datalist, GQuark key_id) @@ -822,6 +812,48 @@ g_datalist_id_get_data (GData **datalist, return res; } +/** + * g_datalist_get_data: + * @dl: a datalist. + * @k: the string identifying a data element. + * @Returns: the data element, or %NULL if it is not found. + * + * Gets a data element, using its string identifer. This is slower than + * g_datalist_id_get_data() because it compares strings. + **/ +gpointer +g_datalist_get_data (GData **datalist, + const gchar *key) +{ + gpointer res = NULL; + GData *d; + GDataElt *data, *data_end; + + g_return_val_if_fail (datalist != NULL, NULL); + + g_datalist_lock (datalist); + + d = G_DATALIST_GET_POINTER (datalist); + if (d) + { + data = d->data; + data_end = data + d->len; + while (data < data_end) + { + if (strcmp (g_quark_to_string (data->key), key) == 0) + { + res = data->data; + break; + } + data++; + } + } + + g_datalist_unlock (datalist); + + return res; +} + /** * GDataForeachFunc: * @key_id: the #GQuark id to identifying the data element. diff --git a/glib/gdataset.h b/glib/gdataset.h index 2733ffb03..4451c38b4 100644 --- a/glib/gdataset.h +++ b/glib/gdataset.h @@ -76,8 +76,6 @@ guint g_datalist_get_flags (GData **datalist); g_datalist_id_set_data_full ((dl), (q), (d), NULL) #define g_datalist_id_remove_data(dl, q) \ g_datalist_id_set_data ((dl), (q), NULL) -#define g_datalist_get_data(dl, k) \ - (g_datalist_id_get_data ((dl), g_quark_try_string (k))) #define g_datalist_set_data_full(dl, k, d, f) \ g_datalist_id_set_data_full ((dl), g_quark_from_string (k), (d), (f)) #define g_datalist_remove_no_notify(dl, k) \ @@ -93,6 +91,8 @@ guint g_datalist_get_flags (GData **datalist); void g_dataset_destroy (gconstpointer dataset_location); gpointer g_dataset_id_get_data (gconstpointer dataset_location, GQuark key_id); +gpointer g_datalist_get_data (GData **datalist, + const gchar *key); void g_dataset_id_set_data_full (gconstpointer dataset_location, GQuark key_id, gpointer data, diff --git a/glib/glib.symbols b/glib/glib.symbols index d38450d3c..d8a18b9f9 100644 --- a/glib/glib.symbols +++ b/glib/glib.symbols @@ -184,6 +184,7 @@ g_filename_to_utf8_utf8 g_uri_list_extract_uris g_datalist_clear g_datalist_foreach +g_datalist_get_data g_datalist_get_flags g_datalist_id_get_data g_datalist_id_remove_no_notify