On Aug 11, 2009, at 20:09, michaelcbr...@msn.com wrote:
GList *menu = prpl_info->blist_node_menu((PurpleBlistNode *)buddy);
int i = 0;
while (i < g_list_length(menu))
{
PurpleMenuAction *menu_action = g_list_nth_data(menu, i);
if (strcmp(menu_action->label, "Re-request Authorization")==0)
{
printf("Found re-request menu option...\n");
menu_action->callback((PurpleBlistNode *)buddy);
break;
}
i++;
}
This is an inefficient way to iterate through the linked list
(g_list_nth_data walks the list to the nth element, so if you run this
loop over the entire list, you'll end up doing O(n^2) operations).
Typically something like this is used (with variations depending on
whether or not you need to free the list, which, in this case, you do):
while (menu) {
PurpleMenuAction *menu_action = menu->data;
if (g_str_equal(menu_action->label, "...")) {
do stuff
}
/* Destroy the data in the linked list */
purple_menu_action_free(menu);
/* Remove this node from the list */
menu = g_list_delete_link(menu, menu);
}
if you weren't freeing the list, it might look something like:
GList *menu = something;
for ( ; menu; menu = menu->next) {
/* Do something */
}
~Paul
_______________________________________________
Support@pidgin.im mailing list
Want to unsubscribe? Use this link:
http://pidgin.im/cgi-bin/mailman/listinfo/support