libpurple/plugins/keyrings/gnomekeyring.c

branch
soc.2008.masterpassword
changeset 34050
a61e4b9534e4
parent 34049
d8f3b4fd1374
child 34076
64e389ae5cc3
--- a/libpurple/plugins/keyrings/gnomekeyring.c	Sun Nov 06 04:39:44 2011 +0000
+++ b/libpurple/plugins/keyrings/gnomekeyring.c	Sun Nov 06 04:48:43 2011 +0000
@@ -62,10 +62,9 @@
 
 struct _InfoStorage
 {
+	PurpleAccount *account;
 	gpointer cb;
 	gpointer user_data;
-	PurpleAccount *account;
-	char *name;
 };
 
 static GQuark gkp_error_domain(void)
@@ -132,11 +131,11 @@
 static void
 gkp_read(PurpleAccount *account, PurpleKeyringReadCallback cb, gpointer data)
 {
-	InfoStorage *storage = g_new(InfoStorage, 1);
+	InfoStorage *storage = g_new0(InfoStorage, 1);
 
+	storage->account = account;
 	storage->cb = cb;
 	storage->user_data = data;
-	storage->account = account;
 
 	gnome_keyring_find_password(GNOME_KEYRING_NETWORK_PASSWORD,
 	                            gkp_read_continue,
@@ -158,10 +157,8 @@
 	storage = data;
 	g_return_if_fail(storage != NULL);
 
+	account = storage->account;
 	cb = storage->cb;
-	account = storage->account;
-
-	g_free(storage->name);
 
 	if (result != GNOME_KEYRING_RESULT_OK) {
 		switch(result) {
@@ -224,23 +221,25 @@
          PurpleKeyringSaveCallback cb,
          gpointer data)
 {
-	InfoStorage *storage = g_new0(InfoStorage,1);
+	InfoStorage *storage = g_new0(InfoStorage, 1);
 
 	storage->account = account;
 	storage->cb = cb;
 	storage->user_data = data;
-	storage->name = g_strdup_printf("purple-%s",
-		purple_account_get_username(account));
 
 	if (password != NULL && *password != '\0') {
+		char *name;
+
 		purple_debug_info("keyring-gnome",
 			"Updating password for account %s (%s).\n",
 			purple_account_get_username(account),
 			purple_account_get_protocol_id(account));
 
+		name = g_strdup_printf("purple-%s",
+		                       purple_account_get_username(account));
 		gnome_keyring_store_password(GNOME_KEYRING_NETWORK_PASSWORD,
 		                             NULL,  /*default keyring */
-		                             storage->name,
+		                             name,
 		                             password,
 		                             gkp_save_continue,
 		                             storage,
@@ -248,6 +247,7 @@
 		                             "user", purple_account_get_username(account),
 		                             "protocol", purple_account_get_protocol_id(account),
 		                             NULL);
+		g_free(name);
 
 	} else {	/* password == NULL, delete password. */
 		purple_debug_info("keyring-gnome",

mercurial