libpurple/protocols.c

branch
soc.2013.gobjectification.plugins
changeset 36571
89f3e5748a68
parent 36559
7b840aa26d30
child 36606
9fe2d65fe1a7
--- a/libpurple/protocols.c	Thu Aug 22 00:25:08 2013 +0530
+++ b/libpurple/protocols.c	Thu Aug 22 00:29:09 2013 +0530
@@ -687,6 +687,8 @@
 	purple_signals_unregister_by_instance(protocol);
 
 	purple_prefs_disconnect_by_handle(protocol);
+
+	g_object_unref(protocol);
 }
 
 PurpleProtocol *
@@ -695,22 +697,26 @@
 	return g_hash_table_lookup(protocols, id);
 }
 
-gboolean
-purple_protocols_add(PurpleProtocol *protocol)
+PurpleProtocol *
+purple_protocols_add(GType protocol_type)
 {
-	if (purple_find_protocol_info(protocol->id))
-		return FALSE;
+	PurpleProtocol *protocol = g_object_new(protocol_type, NULL);
+	if (purple_find_protocol_info(purple_protocol_get_id(protocol))) {
+		g_object_unref(protocol);
+		return NULL;
+	}
 
-	g_hash_table_insert(protocols, g_strdup(protocol->id), protocol);
-	return TRUE;
+	g_hash_table_insert(protocols, g_strdup(purple_protocol_get_id(protocol)),
+	                    protocol);
+	return protocol;
 }
 
 gboolean purple_protocols_remove(PurpleProtocol *protocol)
 {
-	if (purple_find_protocol_info(protocol->id) == NULL)
+	if (purple_find_protocol_info(purple_protocol_get_id(protocol)) == NULL)
 		return FALSE;
 
-	g_hash_table_remove(protocols, protocol->id);
+	g_hash_table_remove(protocols, purple_protocol_get_id(protocol));
 	purple_protocol_destroy(protocol);
 
 	return TRUE;

mercurial