[libsoup] Replace g_hash_table_foreach() with GHashTableIter
- From: Dan Winship <danw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libsoup] Replace g_hash_table_foreach() with GHashTableIter
- Date: Fri, 13 Jul 2012 18:20:19 +0000 (UTC)
commit f4650169ef770f96e42fb85c13737969adf5e7bb
Author: Dan Winship <danw gnome org>
Date: Sun Jun 3 09:36:14 2012 -0400
Replace g_hash_table_foreach() with GHashTableIter
or g_hash_table_new_full() when the foreach was only being used for
cleanup.
libsoup/soup-auth-manager-ntlm.c | 17 +++------------
libsoup/soup-auth-manager.c | 37 +++++++++++++++++------------------
libsoup/soup-form.c | 12 ++++------
libsoup/soup-session.c | 17 +++++----------
libsoup/soup-xmlrpc.c | 39 ++++++++++++++++++-------------------
5 files changed, 52 insertions(+), 70 deletions(-)
---
diff --git a/libsoup/soup-auth-manager-ntlm.c b/libsoup/soup-auth-manager-ntlm.c
index d21a25c..1e6ebe5 100644
--- a/libsoup/soup-auth-manager-ntlm.c
+++ b/libsoup/soup-auth-manager-ntlm.c
@@ -74,6 +74,8 @@ typedef struct {
#endif
} SoupNTLMConnection;
+static void free_ntlm_connection (SoupNTLMConnection *conn);
+
typedef struct {
gboolean use_ntlm;
@@ -105,7 +107,8 @@ soup_auth_manager_ntlm_init (SoupAuthManagerNTLM *ntlm)
SoupAuthManagerNTLMPrivate *priv =
SOUP_AUTH_MANAGER_NTLM_GET_PRIVATE (ntlm);
- priv->connections_by_id = g_hash_table_new (NULL, NULL);
+ priv->connections_by_id = g_hash_table_new_full (NULL, NULL, NULL,
+ (GDestroyNotify)free_ntlm_connection);
priv->connections_by_msg = g_hash_table_new (NULL, NULL);
#ifdef USE_NTLM_AUTH
priv->ntlm_auth_accessible = (access (NTLM_AUTH, X_OK) == 0);
@@ -128,19 +131,11 @@ free_ntlm_connection (SoupNTLMConnection *conn)
}
static void
-free_ntlm_connection_foreach (gpointer key, gpointer value, gpointer user_data)
-{
- free_ntlm_connection (value);
-}
-
-static void
finalize (GObject *object)
{
SoupAuthManagerNTLMPrivate *priv =
SOUP_AUTH_MANAGER_NTLM_GET_PRIVATE (object);
- g_hash_table_foreach (priv->connections_by_id,
- free_ntlm_connection_foreach, NULL);
g_hash_table_destroy (priv->connections_by_id);
g_hash_table_destroy (priv->connections_by_msg);
@@ -189,11 +184,7 @@ static void
delete_conn (SoupSocket *socket, gpointer user_data)
{
SoupAuthManagerNTLMPrivate *priv = user_data;
- SoupNTLMConnection *conn;
- conn = g_hash_table_lookup (priv->connections_by_id, socket);
- if (conn)
- free_ntlm_connection (conn);
g_hash_table_remove (priv->connections_by_id, socket);
g_signal_handlers_disconnect_by_func (socket, delete_conn, priv);
}
diff --git a/libsoup/soup-auth-manager.c b/libsoup/soup-auth-manager.c
index 1aacf48..2711d9a 100644
--- a/libsoup/soup-auth-manager.c
+++ b/libsoup/soup-auth-manager.c
@@ -63,30 +63,18 @@ typedef struct {
GHashTable *auths; /* scheme:realm -> SoupAuth */
} SoupAuthHost;
+static void soup_auth_host_free (SoupAuthHost *host);
+
static void
soup_auth_manager_init (SoupAuthManager *manager)
{
SoupAuthManagerPrivate *priv = SOUP_AUTH_MANAGER_GET_PRIVATE (manager);
priv->auth_types = g_ptr_array_new ();
- priv->auth_hosts = g_hash_table_new (soup_uri_host_hash,
- soup_uri_host_equal);
-}
-
-static gboolean
-foreach_free_host (gpointer key, gpointer value, gpointer data)
-{
- SoupAuthHost *host = value;
-
- if (host->auth_realms)
- soup_path_map_free (host->auth_realms);
- if (host->auths)
- g_hash_table_destroy (host->auths);
-
- soup_uri_free (host->uri);
- g_slice_free (SoupAuthHost, host);
-
- return TRUE;
+ priv->auth_hosts = g_hash_table_new_full (soup_uri_host_hash,
+ soup_uri_host_equal,
+ NULL,
+ (GDestroyNotify)soup_auth_host_free);
}
static void
@@ -99,7 +87,6 @@ finalize (GObject *object)
g_type_class_unref (priv->auth_types->pdata[i]);
g_ptr_array_free (priv->auth_types, TRUE);
- g_hash_table_foreach_remove (priv->auth_hosts, foreach_free_host, NULL);
g_hash_table_destroy (priv->auth_hosts);
if (priv->proxy_auth)
@@ -402,6 +389,18 @@ get_auth_host_for_message (SoupAuthManagerPrivate *priv, SoupMessage *msg)
return host;
}
+static void
+soup_auth_host_free (SoupAuthHost *host)
+{
+ if (host->auth_realms)
+ soup_path_map_free (host->auth_realms);
+ if (host->auths)
+ g_hash_table_destroy (host->auths);
+
+ soup_uri_free (host->uri);
+ g_slice_free (SoupAuthHost, host);
+}
+
static SoupAuth *
lookup_auth (SoupAuthManagerPrivate *priv, SoupMessage *msg)
{
diff --git a/libsoup/soup-form.c b/libsoup/soup-form.c
index a781d3c..3fe6578 100644
--- a/libsoup/soup-form.c
+++ b/libsoup/soup-form.c
@@ -239,12 +239,6 @@ encode_pair (GString *str, const char *name, const char *value)
append_form_encoded (str, value);
}
-static void
-hash_encode_foreach (gpointer name, gpointer value, gpointer str)
-{
- encode_pair (str, name, value);
-}
-
/**
* soup_form_encode:
* @first_field: name of the first form field
@@ -295,8 +289,12 @@ char *
soup_form_encode_hash (GHashTable *form_data_set)
{
GString *str = g_string_new (NULL);
+ GHashTableIter iter;
+ gpointer name, value;
- g_hash_table_foreach (form_data_set, hash_encode_foreach, str);
+ g_hash_table_iter_init (&iter, form_data_set);
+ while (g_hash_table_iter_next (&iter, &name, &value))
+ encode_pair (str, name, value);
return g_string_free (str, FALSE);
}
diff --git a/libsoup/soup-session.c b/libsoup/soup-session.c
index a91eead..97a379a 100644
--- a/libsoup/soup-session.c
+++ b/libsoup/soup-session.c
@@ -2338,15 +2338,6 @@ soup_session_cancel_message (SoupSession *session, SoupMessage *msg,
}
static void
-gather_conns (gpointer key, gpointer host, gpointer data)
-{
- SoupConnection *conn = key;
- GSList **conns = data;
-
- *conns = g_slist_prepend (*conns, g_object_ref (conn));
-}
-
-static void
flush_queue (SoupSession *session)
{
SoupSessionPrivate *priv = SOUP_SESSION_GET_PRIVATE (session);
@@ -2371,6 +2362,8 @@ soup_session_abort (SoupSession *session)
{
SoupSessionPrivate *priv;
GSList *conns, *c;
+ GHashTableIter iter;
+ gpointer conn, host;
g_return_if_fail (SOUP_IS_SESSION (session));
priv = SOUP_SESSION_GET_PRIVATE (session);
@@ -2380,9 +2373,11 @@ soup_session_abort (SoupSession *session)
/* Close all connections */
g_mutex_lock (&priv->host_lock);
conns = NULL;
- g_hash_table_foreach (priv->conns, gather_conns, &conns);
-
+ g_hash_table_iter_init (&iter, priv->conns);
+ while (g_hash_table_iter_next (&iter, &conn, &host))
+ conns = g_slist_prepend (conns, g_object_ref (conn));
g_mutex_unlock (&priv->host_lock);
+
for (c = conns; c; c = c->next) {
soup_connection_disconnect (c->data);
g_object_unref (c->data);
diff --git a/libsoup/soup-xmlrpc.c b/libsoup/soup-xmlrpc.c
index 06c9bca..49eced6 100644
--- a/libsoup/soup-xmlrpc.c
+++ b/libsoup/soup-xmlrpc.c
@@ -31,24 +31,6 @@ static xmlNode *find_real_node (xmlNode *node);
static gboolean insert_value (xmlNode *parent, GValue *value);
-static void
-insert_member (gpointer name, gpointer value, gpointer data)
-{
- xmlNode *member, **struct_node = data;
-
- if (!*struct_node)
- return;
-
- member = xmlNewChild (*struct_node, NULL,
- (const xmlChar *)"member", NULL);
- xmlNewTextChild (member, NULL,
- (const xmlChar *)"name", (const xmlChar *)name);
- if (!insert_value (member, value)) {
- xmlFreeNode (*struct_node);
- *struct_node = NULL;
- }
-}
-
static gboolean
insert_value (xmlNode *parent, GValue *value)
{
@@ -95,11 +77,28 @@ insert_value (xmlNode *parent, GValue *value)
g_free (encoded);
} else if (type == G_TYPE_HASH_TABLE) {
GHashTable *hash = g_value_get_boxed (value);
- xmlNode *struct_node;
+ GHashTableIter iter;
+ gpointer mname, mvalue;
+ xmlNode *struct_node, *member;
struct_node = xmlNewChild (xvalue, NULL,
(const xmlChar *)"struct", NULL);
- g_hash_table_foreach (hash, insert_member, &struct_node);
+
+ g_hash_table_iter_init (&iter, hash);
+
+ while (g_hash_table_iter_next (&iter, &mname, &mvalue)) {
+ member = xmlNewChild (struct_node, NULL,
+ (const xmlChar *)"member", NULL);
+ xmlNewTextChild (member, NULL,
+ (const xmlChar *)"name",
+ (const xmlChar *)mname);
+ if (!insert_value (member, mvalue)) {
+ xmlFreeNode (struct_node);
+ struct_node = NULL;
+ break;
+ }
+ }
+
if (!struct_node)
return FALSE;
#ifdef G_GNUC_BEGIN_IGNORE_DEPRECATIONS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]