comparison libgaim/prefs.c @ 15023:dd4160b36f80

[gaim-migrate @ 17805] Don't allow invalid plugin callbacks to registered (and eventually crash). Fix an unlikely leak. committer: Tailor Script <tailor@pidgin.im>
author Daniel Atallah <daniel.atallah@gmail.com>
date Wed, 22 Nov 2006 00:43:42 +0000
parents 71149a751439
children 40746bedd9a8
comparison
equal deleted inserted replaced
15022:2d3c7f76cea0 15023:dd4160b36f80
615 615
616 static void 616 static void
617 remove_pref(struct gaim_pref *pref) 617 remove_pref(struct gaim_pref *pref)
618 { 618 {
619 char *name; 619 char *name;
620 GSList *l;
620 621
621 if(!pref || pref == &prefs) 622 if(!pref || pref == &prefs)
622 return; 623 return;
623 624
624 while(pref->first_child) 625 while(pref->first_child)
641 g_hash_table_remove(prefs_hash, name); 642 g_hash_table_remove(prefs_hash, name);
642 g_free(name); 643 g_free(name);
643 644
644 free_pref_value(pref); 645 free_pref_value(pref);
645 646
646 g_slist_free(pref->callbacks); 647 while((l = pref->callbacks) != NULL) {
648 pref->callbacks = pref->callbacks->next;
649 g_free(l->data);
650 g_slist_free_1(l);
651 }
647 g_free(pref->name); 652 g_free(pref->name);
648 g_free(pref); 653 g_free(pref);
649 } 654 }
650 655
651 void 656 void
1005 gaim_prefs_connect_callback(void *handle, const char *name, GaimPrefCallback func, gpointer data) 1010 gaim_prefs_connect_callback(void *handle, const char *name, GaimPrefCallback func, gpointer data)
1006 { 1011 {
1007 struct gaim_pref *pref; 1012 struct gaim_pref *pref;
1008 struct pref_cb *cb; 1013 struct pref_cb *cb;
1009 static guint cb_id = 0; 1014 static guint cb_id = 0;
1015
1016 g_return_val_if_fail(name != NULL, 0);
1017 g_return_val_if_fail(func != NULL, 0);
1010 1018
1011 pref = find_pref(name); 1019 pref = find_pref(name);
1012 if (pref == NULL) 1020 if (pref == NULL)
1013 return 0; 1021 return 0;
1014 1022