Merged in default (pull request #605)

Fri, 18 Oct 2019 01:33:51 +0000

author
Gary Kramlich <grim@reaperworld.com>
date
Fri, 18 Oct 2019 01:33:51 +0000
changeset 40057
5eb3c4b98109
parent 40051
c3c470f86872 (current diff)
parent 40056
7ebcda5aa5b0 (diff)
child 40060
3e35de3c9afa

Merged in default (pull request #605)

Use GSList functions instead of manual iterations

Approved-by: Elliott Sales de Andrade
Approved-by: Gary Kramlich
Approved-by: Eion Robb

--- a/libpurple/account.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/account.c	Fri Oct 18 01:33:51 2019 +0000
@@ -1072,15 +1072,8 @@
 	g_hash_table_destroy(priv->settings);
 	g_hash_table_destroy(priv->ui_settings);
 
-	while (priv->deny) {
-		g_free(priv->deny->data);
-		priv->deny = g_slist_delete_link(priv->deny, priv->deny);
-	}
-
-	while (priv->permit) {
-		g_free(priv->permit->data);
-		priv->permit = g_slist_delete_link(priv->permit, priv->permit);
-	}
+	g_slist_free_full(priv->deny, g_free);
+	g_slist_free_full(priv->permit, g_free);
 
 	G_OBJECT_CLASS(purple_account_parent_class)->finalize(object);
 }
@@ -2291,7 +2284,6 @@
 purple_account_privacy_permit_add(PurpleAccount *account, const char *who,
 						gboolean local_only)
 {
-	GSList *l;
 	char *name;
 	PurpleBuddy *buddy;
 	PurpleAccountPrivate *priv;
@@ -2303,14 +2295,7 @@
 	priv = purple_account_get_instance_private(account);
 	name = g_strdup(purple_normalize(account, who));
 
-	for (l = priv->permit; l != NULL; l = l->next) {
-		if (g_str_equal(name, l->data))
-			/* This buddy already exists */
-			break;
-	}
-
-	if (l != NULL)
-	{
+	if (g_slist_find_custom(priv->permit, name, (GCompareFunc)g_strcmp0) != NULL) {
 		/* This buddy already exists, so bail out */
 		g_free(name);
 		return FALSE;
@@ -2352,12 +2337,7 @@
 	priv = purple_account_get_instance_private(account);
 	name = purple_normalize(account, who);
 
-	for (l = priv->permit; l != NULL; l = l->next) {
-		if (g_str_equal(name, l->data))
-			/* We found the buddy we were looking for */
-			break;
-	}
-
+	l = g_slist_find_custom(priv->permit, name, (GCompareFunc)g_strcmp0);
 	if (l == NULL)
 		/* We didn't find the buddy we were looking for, so bail out */
 		return FALSE;
@@ -2389,7 +2369,6 @@
 purple_account_privacy_deny_add(PurpleAccount *account, const char *who,
 					  gboolean local_only)
 {
-	GSList *l;
 	char *name;
 	PurpleBuddy *buddy;
 	PurpleAccountPrivate *priv;
@@ -2401,14 +2380,7 @@
 	priv = purple_account_get_instance_private(account);
 	name = g_strdup(purple_normalize(account, who));
 
-	for (l = priv->deny; l != NULL; l = l->next) {
-		if (g_str_equal(name, l->data))
-			/* This buddy already exists */
-			break;
-	}
-
-	if (l != NULL)
-	{
+	if (g_slist_find_custom(priv->deny, name, (GCompareFunc)g_strcmp0) != NULL) {
 		/* This buddy already exists, so bail out */
 		g_free(name);
 		return FALSE;
@@ -2449,12 +2421,7 @@
 	priv = purple_account_get_instance_private(account);
 	normalized = purple_normalize(account, who);
 
-	for (l = priv->deny; l != NULL; l = l->next) {
-		if (g_str_equal(normalized, l->data))
-			/* We found the buddy we were looking for */
-			break;
-	}
-
+	l = g_slist_find_custom(priv->deny, normalized, (GCompareFunc)g_strcmp0);
 	if (l == NULL)
 		/* We didn't find the buddy we were looking for, so bail out */
 		return FALSE;
@@ -2599,7 +2566,6 @@
 gboolean
 purple_account_privacy_check(PurpleAccount *account, const char *who)
 {
-	GSList *list;
 	PurpleAccountPrivate *priv = purple_account_get_instance_private(account);
 
 	switch (purple_account_get_privacy_type(account)) {
@@ -2611,19 +2577,11 @@
 
 		case PURPLE_ACCOUNT_PRIVACY_ALLOW_USERS:
 			who = purple_normalize(account, who);
-			for (list=priv->permit; list!=NULL; list=list->next) {
-				if (g_str_equal(who, list->data))
-					return TRUE;
-			}
-			return FALSE;
+			return (g_slist_find_custom(priv->permit, who, (GCompareFunc)g_strcmp0) != NULL);
 
 		case PURPLE_ACCOUNT_PRIVACY_DENY_USERS:
 			who = purple_normalize(account, who);
-			for (list=priv->deny; list!=NULL; list=list->next) {
-				if (g_str_equal(who, list->data))
-					return FALSE;
-			}
-			return TRUE;
+			return (g_slist_find_custom(priv->deny, who, (GCompareFunc)g_strcmp0) == NULL);
 
 		case PURPLE_ACCOUNT_PRIVACY_ALLOW_BUDDYLIST:
 			return (purple_blist_find_buddy(account, who) != NULL);
--- a/libpurple/connection.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/connection.c	Fri Oct 18 01:33:51 2019 +0000
@@ -855,13 +855,7 @@
 
 	purple_signal_emit(purple_connections_get_handle(), "signing-off", gc);
 
-	while (priv->active_chats)
-	{
-		PurpleChatConversation *b = priv->active_chats->data;
-
-		priv->active_chats = g_slist_remove(priv->active_chats, b);
-		purple_chat_conversation_leave(b);
-	}
+	g_slist_free_full(priv->active_chats, (GDestroyNotify)purple_chat_conversation_leave);
 
 	update_keepalive(gc, FALSE);
 
--- a/libpurple/prefs.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/prefs.c	Fri Oct 18 01:33:51 2019 +0000
@@ -763,7 +763,6 @@
 remove_pref(struct purple_pref *pref)
 {
 	char *name;
-	GSList *l;
 
 	if(!pref)
 		return;
@@ -794,11 +793,7 @@
 
 	free_pref_value(pref);
 
-	while((l = pref->callbacks) != NULL) {
-		pref->callbacks = pref->callbacks->next;
-		g_free(l->data);
-		g_slist_free_1(l);
-	}
+	g_slist_free_full(pref->callbacks, g_free);
 	g_free(pref->name);
 	g_free(pref);
 }
--- a/libpurple/protocols/bonjour/buddy.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/protocols/bonjour/buddy.c	Fri Oct 18 01:33:51 2019 +0000
@@ -243,10 +243,7 @@
 bonjour_buddy_delete(BonjourBuddy *buddy)
 {
 	g_free(buddy->name);
-	while (buddy->ips != NULL) {
-		g_free(buddy->ips->data);
-		buddy->ips = g_slist_delete_link(buddy->ips, buddy->ips);
-	}
+	g_slist_free_full(buddy->ips, g_free);
 	g_free(buddy->first);
 	g_free(buddy->phsh);
 	g_free(buddy->status);
--- a/libpurple/protocols/bonjour/jabber.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/protocols/bonjour/jabber.c	Fri Oct 18 01:33:51 2019 +0000
@@ -801,7 +801,7 @@
 	if (conn == NULL) {
 		PurpleConversation *conv = NULL;
 		PurpleAccount *account = NULL;
-		GSList *tmp = bb->ips;
+		GSList *tmp;
 
 		if (error && error->code == G_IO_ERROR_CANCELLED) {
 			/* This conversation was closed before it started. */
@@ -821,8 +821,7 @@
 		 * presence recieved (e.g. multiple interfaces).
 		 * We need to make sure that we find the previously used entry.
 		 */
-		while (tmp && bb->conversation->ip_link != tmp->data)
-			tmp = g_slist_next(tmp);
+		tmp = g_slist_find(bb->ips, bb->conversation->ip_link);
 		if (tmp)
 			tmp = g_slist_next(tmp);
 
@@ -1254,10 +1253,7 @@
 		g_slist_free(buddies);
 	}
 
-	while (jdata->pending_conversations != NULL) {
-		bonjour_jabber_close_conversation(jdata->pending_conversations->data);
-		jdata->pending_conversations = g_slist_delete_link(jdata->pending_conversations, jdata->pending_conversations);
-	}
+	g_slist_free_full(jdata->pending_conversations, (GDestroyNotify)bonjour_jabber_close_conversation);
 }
 
 XepIq *
@@ -1309,21 +1305,19 @@
 	gboolean blocked = FALSE;
 	GSList *l = NULL;
 	PurpleAccount *acc = purple_buddy_get_account(pb);
+	const gchar *name;
 
 	if(acc == NULL)
 		return FALSE;
 
-	acc = purple_buddy_get_account(pb);
+	l = purple_account_privacy_get_denied(acc);
+	name = purple_buddy_get_name(pb);
 
-	for(l = purple_account_privacy_get_denied(acc); l != NULL; l = l->next) {
-		const gchar *name = purple_buddy_get_name(pb);
+	if(g_slist_find_custom(l, name, (GCompareFunc)purple_utf8_strcasecmp) != NULL) {
 		const gchar *username = bonjour_get_jid(acc);
 
-		if(!purple_utf8_strcasecmp(name, (char *)l->data)) {
-			purple_debug_info("bonjour", "%s has been blocked by %s.\n", name, username);
-			blocked = TRUE;
-			break;
-		}
+		purple_debug_info("bonjour", "%s has been blocked by %s.\n", name, username);
+		blocked = TRUE;
 	}
 	return blocked;
 }
--- a/libpurple/protocols/bonjour/mdns_avahi.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/protocols/bonjour/mdns_avahi.c	Fri Oct 18 01:33:51 2019 +0000
@@ -603,11 +603,7 @@
 	if (idata->buddy_icon_rec_browser != NULL)
 		avahi_record_browser_free(idata->buddy_icon_rec_browser);
 
-	while(idata->resolvers != NULL) {
-		AvahiSvcResolverData *rd = idata->resolvers->data;
-		_cleanup_resolver_data(rd);
-		idata->resolvers = g_slist_delete_link(idata->resolvers, idata->resolvers);
-	}
+	g_slist_free_full(idata->resolvers, (GDestroyNotify)_cleanup_resolver_data);
 
 	g_free(idata);
 
--- a/libpurple/protocols/irc/parse.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/protocols/irc/parse.c	Fri Oct 18 01:33:51 2019 +0000
@@ -239,11 +239,7 @@
 
 void irc_unregister_commands(void)
 {
-	while (cmds) {
-		PurpleCmdId id = GPOINTER_TO_UINT(cmds->data);
-		purple_cmd_unregister(id);
-		cmds = g_slist_delete_link(cmds, cmds);
-	}
+	g_slist_free_full(cmds, (GDestroyNotify)purple_cmd_unregister);
 }
 
 static char *irc_send_convert(struct irc_conn *irc, const char *string)
--- a/libpurple/protocols/jabber/auth.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/protocols/jabber/auth.c	Fri Oct 18 01:33:51 2019 +0000
@@ -178,10 +178,7 @@
 		}
 	}
 
-	while (mechanisms) {
-		g_free(mechanisms->data);
-		mechanisms = g_slist_delete_link(mechanisms, mechanisms);
-	}
+	g_slist_free_full(mechanisms, g_free);
 
 	if (js->auth_mech == NULL) {
 		/* Found no good mechanisms... */
--- a/libpurple/protocols/jabber/buddy.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/protocols/jabber/buddy.c	Fri Oct 18 01:33:51 2019 +0000
@@ -880,10 +880,7 @@
 
 	purple_notify_userinfo(jbi->js->gc, jbi->jid, user_info, NULL, NULL);
 
-	while (jbi->vcard_images) {
-		g_object_unref(jbi->vcard_images->data);
-		jbi->vcard_images = g_slist_delete_link(jbi->vcard_images, jbi->vcard_images);
-	}
+	g_slist_free_full(jbi->vcard_images, g_object_unref);
 
 	jbi->js->pending_buddy_info_requests = g_slist_remove(jbi->js->pending_buddy_info_requests, jbi);
 
@@ -892,20 +889,17 @@
 
 static void jabber_buddy_info_remove_id(JabberBuddyInfo *jbi, const char *id)
 {
-	GSList *l = jbi->ids;
+	GSList *l;
 	char *comp_id;
 
 	if(!id)
 		return;
 
-	while(l) {
+	l = g_slist_find_custom(jbi->ids, id, (GCompareFunc)g_strcmp0);
+	if(l) {
 		comp_id = l->data;
-		if(purple_strequal(id, comp_id)) {
-			jbi->ids = g_slist_remove(jbi->ids, comp_id);
-			g_free(comp_id);
-			return;
-		}
-		l = l->next;
+		jbi->ids = g_slist_delete_link(jbi->ids, l);
+		g_free(comp_id);
 	}
 }
 
--- a/libpurple/protocols/jabber/google/google_roster.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/protocols/jabber/google/google_roster.c	Fri Oct 18 01:33:51 2019 +0000
@@ -33,14 +33,10 @@
 	const char *jid = purple_xmlnode_get_attrib(item, "jid");
 	char *jid_norm = (char *)jabber_normalize(account, jid);
 
-	while (list) {
-		if (purple_strequal(jid_norm, (char*)list->data)) {
-			purple_xmlnode_set_attrib(query, "xmlns:gr", NS_GOOGLE_ROSTER);
-			purple_xmlnode_set_attrib(query, "gr:ext", "2");
-			purple_xmlnode_set_attrib(item, "gr:t", "B");
-			return;
-		}
-		list = list->next;
+	if (g_slist_find_custom(list, jid_norm, (GCompareFunc)g_strcmp0)) {
+		purple_xmlnode_set_attrib(query, "xmlns:gr", NS_GOOGLE_ROSTER);
+		purple_xmlnode_set_attrib(query, "gr:ext", "2");
+		purple_xmlnode_set_attrib(item, "gr:t", "B");
 	}
 }
 
@@ -75,10 +71,7 @@
 			purple_debug_info("jabber", "Removing %s from local buddy list\n",
 			                  jid_norm);
 
-			do {
-				purple_blist_remove_buddy(buddies->data);
-				buddies = g_slist_delete_link(buddies, buddies);
-			} while (buddies);
+			g_slist_free_full(buddies, (GDestroyNotify)purple_blist_remove_buddy);
 		}
 
 		g_free(jid_norm);
--- a/libpurple/protocols/jabber/jabber.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/protocols/jabber/jabber.c	Fri Oct 18 01:33:51 2019 +0000
@@ -3767,10 +3767,7 @@
 static void cmds_free_func(gpointer value)
 {
 	GSList *commands = value;
-	while (commands) {
-		purple_cmd_unregister(GPOINTER_TO_UINT(commands->data));
-		commands = g_slist_delete_link(commands, commands);
-	}
+	g_slist_free_full(commands, (GDestroyNotify)purple_cmd_unregister);
 }
 
 static void jabber_unregister_commands(PurpleProtocol *protocol)
--- a/libpurple/protocols/jabber/presence.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/protocols/jabber/presence.c	Fri Oct 18 01:33:51 2019 +0000
@@ -1055,11 +1055,7 @@
 	}
 
 out:
-	while (presence.chat_info.codes)
-		presence.chat_info.codes =
-			g_slist_delete_link(presence.chat_info.codes,
-			                    presence.chat_info.codes);
-
+	g_slist_free(presence.chat_info.codes);
 	g_free(presence.status);
 	g_free(presence.vcard_avatar_hash);
 	g_free(presence.nickname);
--- a/libpurple/protocols/jabber/roster.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/protocols/jabber/roster.c	Fri Oct 18 01:33:51 2019 +0000
@@ -94,14 +94,11 @@
 
 static void remove_purple_buddies(JabberStream *js, const char *jid)
 {
-	GSList *buddies, *l;
+	GSList *buddies;
 
 	buddies = purple_blist_find_buddies(purple_connection_get_account(js->gc), jid);
 
-	for(l = buddies; l; l = l->next)
-		purple_blist_remove_buddy(l->data);
-
-	g_slist_free(buddies);
+	g_slist_free_full(buddies, (GDestroyNotify)purple_blist_remove_buddy);
 }
 
 static void add_purple_buddy_to_groups(JabberStream *js, const char *jid,
--- a/libpurple/protocols/jabber/xdata.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/protocols/jabber/xdata.c	Fri Oct 18 01:33:51 2019 +0000
@@ -141,10 +141,7 @@
 	}
 
 	g_hash_table_destroy(data->fields);
-	while(data->values) {
-		g_free(data->values->data);
-		data->values = g_slist_delete_link(data->values, data->values);
-	}
+	g_slist_free_full(data->values, g_free);
 	g_list_free_full(data->actions, g_free);
 	g_free(data);
 
@@ -163,10 +160,7 @@
 	JabberStream *js = data->js;
 	gboolean hasActions = (data->actions != NULL);
 	g_hash_table_destroy(data->fields);
-	while(data->values) {
-		g_free(data->values->data);
-		data->values = g_slist_delete_link(data->values, data->values);
-	}
+	g_slist_free_full(data->values, g_free);
 	g_list_free_full(data->actions, g_free);
 	g_free(data);
 
--- a/libpurple/protocols/novell/nmconference.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/protocols/novell/nmconference.c	Fri Oct 18 01:33:51 2019 +0000
@@ -165,8 +165,7 @@
 		nm_release_user_record((NMUserRecord *) element->data);
 		element->data = NULL;
 		conference->participants =
-			g_slist_remove_link(conference->participants, element);
-		g_slist_free_1(element);
+			g_slist_delete_link(conference->participants, element);
 	}
 }
 
--- a/libpurple/protocols/novell/nmconn.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/protocols/novell/nmconn.c	Fri Oct 18 01:33:51 2019 +0000
@@ -182,12 +182,7 @@
 void nm_release_conn(NMConn *conn)
 {
 	if (conn) {
-		GSList *node;
-		for (node = conn->requests; node; node = node->next) {
-			if (node->data)
-				nm_release_request(node->data);
-		}
-		g_slist_free(conn->requests);
+		g_slist_free_full(conn->requests, (GDestroyNotify)nm_release_request);
 		conn->requests = NULL;
 		g_free(conn->ssl_conn);
 		conn->ssl_conn = NULL;
--- a/libpurple/protocols/novell/nmcontact.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/protocols/novell/nmcontact.c	Fri Oct 18 01:33:51 2019 +0000
@@ -863,35 +863,17 @@
 static void
 _release_folder_contacts(NMFolder * folder)
 {
-	GSList *cnode;
-	NMContact *contact;
-
-	for (cnode = folder->contacts; cnode; cnode = cnode->next) {
-		contact = cnode->data;
-		cnode->data = NULL;
-		nm_release_contact(contact);
-	}
-
-	g_slist_free(folder->contacts);
+	g_slist_free_full(folder->contacts, (GDestroyNotify)nm_release_contact);
 	folder->contacts = NULL;
 }
 
 static void
 _release_folder_folders(NMFolder * folder)
 {
-	GSList *fnode;
-	NMFolder *subfolder;
-
 	if (folder == NULL)
 		return;
 
-	for (fnode = folder->folders; fnode; fnode = fnode->next) {
-		subfolder = fnode->data;
-		fnode->data = NULL;
-		nm_release_folder(subfolder);
-	}
-
-	g_slist_free(folder->folders);
+	g_slist_free_full(folder->folders, (GDestroyNotify)nm_release_folder);
 	folder->folders = NULL;
 }
 
--- a/libpurple/protocols/novell/nmrtf.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/protocols/novell/nmrtf.c	Fri Oct 18 01:33:51 2019 +0000
@@ -244,7 +244,6 @@
 {
 	GSList *node;
 	NMRtfFont *font;
-	NMRtfStateSave *save;
 
 	if (ctx) {
 		for (node = ctx->font_table; node; node = node->next) {
@@ -254,12 +253,7 @@
 			node->data = NULL;
 		}
 		g_slist_free(ctx->font_table);
-		for (node = ctx->saved; node; node = node->next) {
-			save = node->data;
-			g_free(save);
-			node->data = NULL;
-		}
-		g_slist_free(ctx->saved);
+		g_slist_free_full(ctx->saved, g_free);
 		g_string_free(ctx->ansi, TRUE);
 		g_string_free(ctx->output, TRUE);
 		g_free(ctx);
@@ -489,8 +483,7 @@
 
     g_free(save_old);
     link_old = ctx->saved;
-    ctx->saved = g_slist_remove_link(ctx->saved, link_old);
-    g_slist_free_1(link_old);
+    ctx->saved = g_slist_delete_link(ctx->saved, link_old);
     return NMRTF_OK;
 }
 
--- a/libpurple/protocols/novell/nmuser.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/protocols/novell/nmuser.c	Fri Oct 18 01:33:51 2019 +0000
@@ -942,11 +942,10 @@
 
 	/* Remove item from the cached list */
 	if ((node = g_slist_find_custom(*list_ptr, dn, (GCompareFunc)purple_utf8_strcasecmp))) {
-		*list_ptr = g_slist_remove_link(*list_ptr, node);
-		g_slist_free_1(node);
+		*list_ptr = g_slist_delete_link(*list_ptr, node);
 	}
 
-    fields = nm_field_add_pointer(fields, tag, 0, NMFIELD_METHOD_DELETE, 0,
+	fields = nm_field_add_pointer(fields, tag, 0, NMFIELD_METHOD_DELETE, 0,
 								  g_strdup(dn), NMFIELD_TYPE_DN);
 
 	rc = nm_send_request(user->conn, "updateblocks", fields, callback, data, NULL);
@@ -1070,22 +1069,11 @@
 void
 nm_conference_list_free(NMUser * user)
 {
-	GSList *cnode;
-	NMConference *conference;
-
 	if (user == NULL)
 		return;
 
-	if (user->conferences) {
-		for (cnode = user->conferences; cnode; cnode = cnode->next) {
-			conference = cnode->data;
-			cnode->data = NULL;
-			nm_release_conference(conference);
-		}
-
-		g_slist_free(user->conferences);
-		user->conferences = NULL;
-	}
+	g_slist_free_full(user->conferences, (GDestroyNotify)nm_release_conference);
+	user->conferences = NULL;
 }
 
 NMConference *
@@ -1520,14 +1508,11 @@
 		nm_conference_add_participant(conference, user_record);
 
 		/* Find the user in the list and remove it */
-		for (node = list; node; node = node->next) {
-			if (nm_utf8_str_equal(nm_user_record_get_dn(user_record),
-								  (const char *) node->data)) {
-				g_free(node->data);
-				list = g_slist_delete_link(list, node);
-				nm_request_set_user_define(request, list);
-				break;
-			}
+		node = g_slist_find_custom(list, nm_user_record_get_dn(user_record), (GCompareFunc)purple_utf8_strcasecmp);
+		if (node) {
+			g_free(node->data);
+			list = g_slist_delete_link(list, node);
+			nm_request_set_user_define(request, list);
 		}
 
 		/* Time to callback? */
--- a/libpurple/protocols/novell/novell.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/protocols/novell/novell.c	Fri Oct 18 01:33:51 2019 +0000
@@ -1242,7 +1242,6 @@
 	PurpleGroup *group;
 	PurpleBuddy *buddy;
 	GSList *rem_list = NULL;
-	GSList *l;
 	NMFolder *folder = NULL;
 	const char *gname = NULL;
 
@@ -1276,12 +1275,7 @@
 		}
 	}
 
-	if (rem_list) {
-		for (l = rem_list; l; l = l->next) {
-			purple_blist_remove_buddy(l->data);
-		}
-		g_slist_free(rem_list);
-	}
+	g_slist_free_full(rem_list, (GDestroyNotify)purple_blist_remove_buddy);
 }
 
 /* Add all of the contacts in the given folder to the Purple buddy list */
--- a/libpurple/protocols/oscar/flap_connection.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/protocols/oscar/flap_connection.c	Fri Oct 18 01:33:51 2019 +0000
@@ -500,11 +500,7 @@
 		flap_connection_destroy_chat(od, conn);
 
 	g_slist_free(conn->groups);
-	while (conn->rateclasses != NULL)
-	{
-		g_free(conn->rateclasses->data);
-		conn->rateclasses = g_slist_delete_link(conn->rateclasses, conn->rateclasses);
-	}
+	g_slist_free_full(conn->rateclasses, g_free);
 
 	g_hash_table_destroy(conn->rateclass_members);
 
@@ -651,14 +647,11 @@
 	for (cur = od->oscar_connections; cur != NULL; cur = cur->next)
 	{
 		FlapConnection *conn;
-		GSList *l;
 
 		conn = cur->data;
 
-		for (l = conn->groups; l != NULL; l = l->next)
-		{
-			if (GPOINTER_TO_UINT(l->data) == group)
-				return conn;
+		if (g_slist_find(conn->groups, GUINT_TO_POINTER(group)) != NULL) {
+			return conn;
 		}
 	}
 
--- a/libpurple/protocols/oscar/oscar.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/protocols/oscar/oscar.c	Fri Oct 18 01:33:51 2019 +0000
@@ -878,12 +878,7 @@
 
 	od = purple_connection_get_protocol_data(gc);
 
-	while (od->oscar_chats)
-	{
-		struct chat_connection *cc = od->oscar_chats->data;
-		od->oscar_chats = g_slist_remove(od->oscar_chats, cc);
-		oscar_chat_destroy(cc);
-	}
+	g_slist_free_full(od->oscar_chats, (GDestroyNotify)oscar_chat_destroy);
 	while (od->create_rooms)
 	{
 		struct create_room *cr = od->create_rooms->data;
@@ -2980,10 +2975,9 @@
 	else {
 		/* Don't send if this turkey is in our deny list */
 		PurpleAccount *account = purple_connection_get_account(gc);
-		GSList *list;
-
-		for (list=purple_account_privacy_get_denied(account); (list && oscar_util_name_compare(name, list->data)); list=list->next);
-		if (!list) {
+		GSList *list = purple_account_privacy_get_denied(account);
+
+		if (!g_slist_find_custom(list, name, (GCompareFunc)oscar_util_name_compare)) {
 			struct buddyinfo *bi = g_hash_table_lookup(od->buddyinfo, purple_normalize(account, name));
 			if (bi && bi->typingnot) {
 				if (state == PURPLE_IM_TYPING)
@@ -3775,10 +3769,7 @@
 			cur = g_slist_prepend(cur, b);
 		}
 	}
-	while (cur != NULL) {
-		purple_blist_remove_buddy(cur->data);
-		cur = g_slist_delete_link(cur, cur);
-	}
+	g_slist_free_full(cur, (GDestroyNotify)purple_blist_remove_buddy);
 
 	/* Permit list (ICQ doesn't have one) */
 	if (!od->icq) {
@@ -3889,8 +3880,8 @@
 
 			case AIM_SSI_TYPE_PERMIT: { /* Permit buddy (unless we're on ICQ) */
 				if (!od->icq && curitem->name) {
-					for (cur = purple_account_privacy_get_permitted(account); (cur && oscar_util_name_compare(curitem->name, cur->data)); cur = cur->next);
-					if (!cur) {
+					cur = purple_account_privacy_get_permitted(account);
+					if (!g_slist_find_custom(cur, curitem->name, (GCompareFunc)oscar_util_name_compare)) {
 						purple_debug_info("oscar",
 								   "ssi: adding permit buddy %s to local list\n", curitem->name);
 						purple_account_privacy_permit_add(account, curitem->name, TRUE);
@@ -3901,8 +3892,8 @@
 			case AIM_SSI_TYPE_ICQDENY:
 			case AIM_SSI_TYPE_DENY: { /* Deny buddy */
 				if (curitem->type == deny_entry_type && curitem->name) {
-					for (cur = purple_account_privacy_get_denied(account); (cur && oscar_util_name_compare(curitem->name, cur->data)); cur = cur->next);
-					if (!cur) {
+					cur = purple_account_privacy_get_denied(account);
+					if (!g_slist_find_custom(cur, curitem->name, (GCompareFunc)oscar_util_name_compare)) {
 						purple_debug_info("oscar",
 								   "ssi: adding deny buddy %s to local list\n", curitem->name);
 						purple_account_privacy_deny_add(account, curitem->name, TRUE);
--- a/libpurple/protocols/oscar/oscar_data.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/protocols/oscar/oscar_data.c	Fri Oct 18 01:33:51 2019 +0000
@@ -111,11 +111,7 @@
 		g_object_unref(od->http_conns);
 	}
 
-	while (od->requesticon)
-	{
-		g_free(od->requesticon->data);
-		od->requesticon = g_slist_delete_link(od->requesticon, od->requesticon);
-	}
+	g_slist_free_full(od->requesticon, g_free);
 	g_free(od->email);
 	g_free(od->newp);
 	g_free(od->oldp);
--- a/libpurple/protocols/oscar/tlv.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/protocols/oscar/tlv.c	Fri Oct 18 01:33:51 2019 +0000
@@ -233,11 +233,7 @@
  */
 void aim_tlvlist_free(GSList *list)
 {
-	while (list != NULL)
-	{
-		freetlv(list->data);
-		list = g_slist_delete_link(list, list);
-	}
+	g_slist_free_full(list, (GDestroyNotify)freetlv);
 }
 
 /**
@@ -248,16 +244,7 @@
  */
 int aim_tlvlist_count(GSList *list)
 {
-	GSList *cur;
-	int count;
-
-	if (list == NULL)
-		return 0;
-
-	for (cur = list, count = 0; cur; cur = cur->next)
-		count++;
-
-	return count;
+	return (int)g_slist_length(list);
 }
 
 /**
--- a/libpurple/protocols/simple/sipmsg.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/protocols/simple/sipmsg.c	Fri Oct 18 01:33:51 2019 +0000
@@ -193,32 +193,21 @@
 }
 
 void sipmsg_remove_header(struct sipmsg *msg, const gchar *name) {
-	struct siphdrelement *elem;
-	GSList *tmp = msg->headers;
-	while(tmp) {
-		elem = tmp->data;
-		if(g_ascii_strcasecmp(elem->name, name)==0) {
-			msg->headers = g_slist_remove(msg->headers, elem);
-			g_free(elem->name);
-			g_free(elem->value);
-			g_free(elem);
-			return;
-		}
-		tmp = g_slist_next(tmp);
+	GSList *tmp = g_slist_find_custom(msg->headers, name, (GCompareFunc)g_ascii_strcasecmp);
+	if(tmp) {
+		struct siphdrelement *elem = tmp->data;
+		msg->headers = g_slist_delete_link(msg->headers, tmp);
+		g_free(elem->name);
+		g_free(elem->value);
+		g_free(elem);
 	}
-	return;
 }
 
 const gchar *sipmsg_find_header(struct sipmsg *msg, const gchar *name) {
-	GSList *tmp;
-	struct siphdrelement *elem;
-	tmp = msg->headers;
-	while(tmp) {
-		elem = tmp->data;
-		if(g_ascii_strcasecmp(elem->name, name)==0) {
-			return elem->value;
-		}
-		tmp = g_slist_next(tmp);
+	GSList *tmp = g_slist_find_custom(msg->headers, name, (GCompareFunc)g_ascii_strcasecmp);
+	if(tmp) {
+		struct siphdrelement *elem = tmp->data;
+		return elem->value;
 	}
 	return NULL;
 }
--- a/libpurple/protocols/zephyr/zephyr.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/libpurple/protocols/zephyr/zephyr.c	Fri Oct 18 01:33:51 2019 +0000
@@ -1982,7 +1982,6 @@
 
 static void zephyr_close(PurpleConnection * gc)
 {
-	GSList *s;
 	zephyr_account *zephyr = purple_connection_get_protocol_data(gc);
 	pid_t tzc_pid = zephyr->tzc_pid;
 
@@ -1994,12 +1993,7 @@
 	if (purple_account_get_bool(purple_connection_get_account(gc), "write_zsubs", FALSE))
 		write_zsubs(zephyr);
 
-	s = zephyr->subscrips;
-	while (s) {
-		free_triple((zephyr_triple *) s->data);
-		s = s->next;
-	}
-	g_slist_free(zephyr->subscrips);
+	g_slist_free_full(zephyr->subscrips, (GDestroyNotify)free_triple);
 
 	if (zephyr->nottimer)
 		g_source_remove(zephyr->nottimer);
@@ -2813,11 +2807,7 @@
 
 static void zephyr_unregister_slash_commands(void)
 {
-	while (cmds) {
-		PurpleCmdId id = GPOINTER_TO_UINT(cmds->data);
-		purple_cmd_unregister(id);
-		cmds = g_slist_delete_link(cmds, cmds);
-	}
+	g_slist_free_full(cmds, (GDestroyNotify)purple_cmd_unregister);
 }
 
 
--- a/pidgin/plugins/spellchk.c	Tue Oct 15 23:24:07 2019 -0400
+++ b/pidgin/plugins/spellchk.c	Fri Oct 18 01:33:51 2019 +0000
@@ -2012,13 +2012,12 @@
 	*list = g_slist_prepend(*list, row_reference);
 }
 
-static void remove_row(void *data1, gpointer data2)
+static void remove_row(gpointer data)
 {
-	GtkTreeRowReference *row_reference;
+	GtkTreeRowReference *row_reference = (GtkTreeRowReference *)data;
 	GtkTreePath *path;
 	GtkTreeIter iter;
 
-	row_reference = (GtkTreeRowReference *)data1;
 	path = gtk_tree_row_reference_get_path(row_reference);
 
 	if (gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, path))
@@ -2036,8 +2035,7 @@
 	sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree));
 	gtk_tree_selection_selected_foreach(sel, add_selected_row_to_list, &list);
 
-	g_slist_foreach(list, remove_row, NULL);
-	g_slist_free(list);
+	g_slist_free_full(list, remove_row);
 
 	save_list();
 }

mercurial