/* stolen from autoaccept.c and gtkblist.c files. */ void buddy_context_menu_add_item (PurpleBlistNode * node, GList ** menu, PurplePlugin * plugin) { PurplePluginProtocolInfo *prpl_info; if (PURPLE_BLIST_NODE_IS_BUDDY (node)) { prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO (((PurpleBuddy *) node)->account-> gc->prpl); if (prpl_info && prpl_info->send_file) { if (!prpl_info->can_receive_file || prpl_info->can_receive_file (((PurpleBuddy *) node)-> account->gc, ((PurpleBuddy *) node)->name)) { PurpleMenuAction *action; if (!PURPLE_BLIST_NODE_IS_BUDDY (node) && !PURPLE_BLIST_NODE_IS_CONTACT (node) && !(purple_blist_node_get_flags (node) & PURPLE_BLIST_NODE_FLAG_NO_SAVE)) return; action = purple_menu_action_new (SCREENSHOT_SEND_MENUITEM_LABEL, PURPLE_CALLBACK (on_blist_context_menu_send_capture), plugin, NULL); (*menu) = g_list_prepend (*menu, action); /* add */ } } } }
static gint compare_account(PurpleBlistNode *node1, PurpleBlistNode *node2) { GList *cur; PurpleAccount *acc1=NULL, *acc2=NULL, *account; if(!node1 || !node2) return 0; if(PURPLE_BLIST_NODE_IS_CHAT(node1)) { acc1 = ((PurpleChat *)node1)->account; } else if(PURPLE_BLIST_NODE_IS_BUDDY(node1)) { acc1 = ((PurpleBuddy *)node1)->account; } else if(PURPLE_BLIST_NODE_IS_CONTACT(node1)) { acc1 = (purple_contact_get_priority_buddy((PurpleContact *)node1))->account; } if(PURPLE_BLIST_NODE_IS_CHAT(node2)) { acc2 = ((PurpleChat *)node2)->account; } else if(PURPLE_BLIST_NODE_IS_BUDDY(node2)) { acc2 = ((PurpleBuddy *)node2)->account; } else if(PURPLE_BLIST_NODE_IS_CONTACT(node2)) { acc2 = (purple_contact_get_priority_buddy((PurpleContact *)node2))->account; } for(cur = purple_accounts_get_all(); cur; cur = cur->next) { account = cur->data; if(account == acc1 && account == acc2) { return 0; } else if(account == acc1) { return -1; } else if(account == acc2) { return 1; } } return 0; }
static gint compare_protocol(PurpleBlistNode *node1, PurpleBlistNode *node2) { PurpleAccount *acc1=NULL, *acc2=NULL; if(!node1) { return 0; } if(PURPLE_BLIST_NODE_IS_CHAT(node1)) { acc1 = ((PurpleChat *)node1)->account; } else if(PURPLE_BLIST_NODE_IS_BUDDY(node1)) { acc1 = ((PurpleBuddy *)node1)->account; } else if(PURPLE_BLIST_NODE_IS_CONTACT(node1)) { acc1 = (purple_contact_get_priority_buddy((PurpleContact *)node1))->account; } if(node2) { if(PURPLE_BLIST_NODE_IS_CHAT(node2)) { acc2 = ((PurpleChat *)node2)->account; } else if(PURPLE_BLIST_NODE_IS_BUDDY(node2)) { acc2 = ((PurpleBuddy *)node2)->account; } else if(PURPLE_BLIST_NODE_IS_CONTACT(node2)) { acc2 = (purple_contact_get_priority_buddy((PurpleContact *)node2))->account; } } return purple_utf8_strcasecmp( purple_account_get_protocol_id(acc1), acc2 ? purple_account_get_protocol_id(acc2) : NULL ); }
static gint compare_logsize(PurpleBlistNode *node1, PurpleBlistNode *node2) { PurpleBlistNode *child; int logsize1=0, logsize2=0; if(PURPLE_BLIST_NODE_IS_CONTACT(node1)) { for (child = node1->child; child; child = child->next) { if(PURPLE_BLIST_NODE_IS_BUDDY(child)) { logsize1 += purple_log_get_total_size( PURPLE_LOG_IM, ((PurpleBuddy*)(child))->name, ((PurpleBuddy*)(child))->account ); } } } if(PURPLE_BLIST_NODE_IS_BUDDY(node1)) { logsize1 = purple_log_get_total_size( PURPLE_LOG_IM, PURPLE_BLIST_NODE_NAME(node1), ((PurpleBuddy *)node1)->account ); } if(PURPLE_BLIST_NODE_IS_CHAT(node1)) { logsize1 = purple_log_get_total_size( PURPLE_LOG_CHAT, PURPLE_BLIST_NODE_NAME(node1), ((PurpleChat *)node1)->account ); } if(PURPLE_BLIST_NODE_IS_CONTACT(node2)) { for (child = node2->child; child; child = child->next) { if(PURPLE_BLIST_NODE_IS_BUDDY(child)) { logsize2 += purple_log_get_total_size( PURPLE_LOG_IM, ((PurpleBuddy*)(child))->name, ((PurpleBuddy*)(child))->account ); } } } if(PURPLE_BLIST_NODE_IS_BUDDY(node2)) { logsize2 = purple_log_get_total_size( PURPLE_LOG_IM, PURPLE_BLIST_NODE_NAME(node2), ((PurpleBuddy *)node2)->account ); } if(PURPLE_BLIST_NODE_IS_CHAT(node2)) { logsize2 = purple_log_get_total_size( PURPLE_LOG_CHAT, PURPLE_BLIST_NODE_NAME(node2), ((PurpleChat *)node2)->account ); } if(logsize1 > logsize2) return -1; if(logsize2 > logsize1) return 1; return 0; }
static void buddy_ticker_show(void) { PurpleBlistNode *gnode, *cnode, *bnode; PurpleBuddy *b; for(gnode = purple_blist_get_root(); gnode; gnode = purple_blist_node_get_sibling_next(gnode)) { if(!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; for(cnode = purple_blist_node_get_first_child(gnode); cnode; cnode = purple_blist_node_get_sibling_next(cnode)) { if(!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; for(bnode = purple_blist_node_get_first_child(cnode); bnode; bnode = purple_blist_node_get_sibling_next(bnode)) { if(!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) continue; b = (PurpleBuddy *)bnode; if(PURPLE_BUDDY_IS_ONLINE(b)) buddy_ticker_add_buddy(b); } } } }
void fb_blist_poke_buddy(PurpleBlistNode *node, gpointer data) { PurpleBuddy *buddy; FacebookBuddy *fbuddy; FacebookAccount *fba; gchar *postdata; if(!PURPLE_BLIST_NODE_IS_BUDDY(node)) return; buddy = (PurpleBuddy *) node; if (!buddy) return; fbuddy = buddy->proto_data; if (!fbuddy) return; fba = fbuddy->fba; if (!fba) return; postdata = g_strdup_printf("uid=%d&pokeback=0&post_form_id=%s", fbuddy->uid, fba->post_form_id); fb_post_or_get(fba, FB_METHOD_POST, NULL, "/ajax/poke.php", postdata, NULL, NULL, FALSE); g_free(postdata); }
/* * \brief Update a node in the buddy list. * * This function is called from libpurple to inform us a node in the * buddy_list needs updating. So this function invokes rebuilding * account_<protocol_id>_<account_name>/contacts and updates the * status_messsage_of_<buddy_id> file in the appropriate account-directory. * * \param list The list the changed node belongs to * \param node The changed node */ static void update(PurpleBuddyList *list, PurpleBlistNode *node) { if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { write_buddy_list_to_disk(); write_buddys_status_message_to_disk(PURPLE_BUDDY(node)); } }
static void silcpurple_buddy_showkey(PurpleBlistNode *node, gpointer data) { PurpleBuddy *b; PurpleConnection *gc; SilcPurple sg; SilcPublicKey public_key; const char *pkfile; g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); b = (PurpleBuddy *) node; gc = purple_account_get_connection(b->account); sg = gc->proto_data; pkfile = purple_blist_node_get_string(node, "public-key"); if (!silc_pkcs_load_public_key(pkfile, &public_key, SILC_PKCS_FILE_PEM) && !silc_pkcs_load_public_key(pkfile, &public_key, SILC_PKCS_FILE_BIN)) { purple_notify_error(gc, _("Show Public Key"), _("Could not load public key"), NULL); return; } silcpurple_show_public_key(sg, b->name, public_key, NULL, NULL); silc_pkcs_public_key_free(public_key); }
static void lh_migrate_build_lists(void) { PurpleBuddyList *blist = NULL; PurpleBlistNode *root = NULL, *g = NULL, *c = NULL, *b = NULL; blist = purple_get_blist(); root = blist->root; /* walk the blist tree and build a list of the buddies and a list of * the groups corresponding to each buddy */ /* group level */ for(g = root; g && PURPLE_BLIST_NODE_IS_GROUP(g); g = g->next) /* contact level */ for(c = g->child; c && PURPLE_BLIST_NODE_IS_CONTACT(c); c = c->next) /* buddy level */ for(b = c->child; b && PURPLE_BLIST_NODE_IS_BUDDY(b); b = b->next) { PurpleGroup *tmp_group = purple_group_new(((PurpleGroup *)g)->name); PurpleBuddy *tmp_buddy = (PurpleBuddy *)b; /* if this buddy is on the source account then add it * to the GLists */ if(purple_buddy_get_account(tmp_buddy) == source_account) { PurpleBuddy *tmp_buddy_2 = purple_buddy_new(target_account, purple_buddy_get_name(tmp_buddy), purple_buddy_get_alias(tmp_buddy)); groups = g_list_prepend(groups, tmp_group); buddies = g_list_prepend(buddies, tmp_buddy_2); } } return; }
static void silcpurple_buddy_resetkey(PurpleBlistNode *node, gpointer data) { PurpleBuddy *b; PurpleConnection *gc; SilcPurple sg; char *nickname; SilcClientEntry *clients; SilcUInt32 clients_count; g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); b = (PurpleBuddy *) node; gc = purple_account_get_connection(b->account); sg = gc->proto_data; if (!silc_parse_userfqdn(b->name, &nickname, NULL)) return; /* Find client entry */ clients = silc_client_get_clients_local(sg->client, sg->conn, nickname, b->name, &clients_count); if (!clients) { silc_free(nickname); return; } clients[0]->prv_resp = FALSE; silc_client_del_private_message_key(sg->client, sg->conn, clients[0]); silc_free(clients); silc_free(nickname); }
static void netsoul_close (PurpleConnection *gc) { PurpleBlistNode *gnode, *cnode, *bnode; NetsoulData *ns = gc->proto_data; purple_debug_info("netsoul", "netsoul_close\n"); for(gnode = purple_get_blist()->root; gnode; gnode = gnode->next) { if(!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; for(cnode = gnode->child; cnode; cnode = cnode->next) { if(!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; for(bnode = cnode->child; bnode; bnode = bnode->next) { if(!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) continue; if(((PurpleBuddy*)bnode)->account == gc->account) { PurpleBuddy *buddy = (PurpleBuddy*)bnode; if (buddy) purple_buddy_icon_unref(purple_buddy_get_icon(buddy)); } } } } g_free(ns->challenge); g_free(ns->host); close(ns->fd); g_free(ns); purple_input_remove(gc->inpa); }
void silcpurple_send_buddylist(PurpleConnection *gc) { PurpleBuddyList *blist; PurpleBlistNode *gnode, *cnode, *bnode; PurpleBuddy *buddy; PurpleAccount *account; account = purple_connection_get_account(gc); if ((blist = purple_get_blist()) != NULL) { for (gnode = blist->root; gnode != NULL; gnode = gnode->next) { if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; for (cnode = gnode->child; cnode != NULL; cnode = cnode->next) { if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; for (bnode = cnode->child; bnode != NULL; bnode = bnode->next) { if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) continue; buddy = (PurpleBuddy *)bnode; if (purple_buddy_get_account(buddy) == account) silcpurple_add_buddy_i(gc, buddy, TRUE); } } } } }
static GntWidget* create_string_field(PurpleRequestField *field, GntWidget **screenname) { const char *hint = purple_request_field_get_type_hint(field); GntWidget *entry = gnt_entry_new( purple_request_field_string_get_default_value(field)); gnt_entry_set_masked(GNT_ENTRY(entry), purple_request_field_string_is_masked(field)); if (hint && purple_str_has_prefix(hint, "screenname")) { PurpleBlistNode *node = purple_blist_get_root(); gboolean offline = purple_str_has_suffix(hint, "all"); for (; node; node = purple_blist_node_next(node, offline)) { if (!PURPLE_BLIST_NODE_IS_BUDDY(node)) continue; gnt_entry_add_suggest(GNT_ENTRY(entry), purple_buddy_get_name((PurpleBuddy*)node)); } gnt_entry_set_always_suggest(GNT_ENTRY(entry), TRUE); if (screenname) *screenname = entry; } else if (hint && !strcmp(hint, "group")) { PurpleBlistNode *node; for (node = purple_blist_get_root(); node; node = purple_blist_node_get_sibling_next(node)) { if (PURPLE_BLIST_NODE_IS_GROUP(node)) gnt_entry_add_suggest(GNT_ENTRY(entry), purple_group_get_name((PurpleGroup *)node)); } } return entry; }
/* 208 - MSG_CLIENT_ADD_HOTLIST_SEQ */ static void nap_send_buddylist(PurpleConnection *gc) { PurpleBuddyList *blist; PurpleBlistNode *gnode, *cnode, *bnode; PurpleBuddy *buddy; if ((blist = purple_get_blist()) != NULL) { for (gnode = blist->root; gnode != NULL; gnode = gnode->next) { if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; for (cnode = gnode->child; cnode != NULL; cnode = cnode->next) { if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; for (bnode = cnode->child; bnode != NULL; bnode = bnode->next) { if (!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) continue; buddy = (PurpleBuddy *)bnode; nap_write_packet(gc, 208, "%s", buddy->name); } } } } }
static GList *waprpl_blist_node_menu(PurpleBlistNode *node) { if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { return NULL; } else { return NULL; } }
static void extended_buddy_menu_cb(PurpleBlistNode *node, GList **menu) { PurpleMenuAction *action = NULL; GList *submenu = NULL; if( !PURPLE_BLIST_NODE_IS_CONTACT(node) && !PURPLE_BLIST_NODE_IS_BUDDY(node) && !PURPLE_BLIST_NODE_IS_CHAT(node) ) { return; } if(purple_blist_node_get_flags(node) & PURPLE_BLIST_NODE_FLAG_NO_SAVE) { return; } if( purple_prefs_get_int(PLUGIN_PREFS_PREFIX "/sort1") != SORT_METHOD_PRIORITY && purple_prefs_get_int(PLUGIN_PREFS_PREFIX "/sort2") != SORT_METHOD_PRIORITY && purple_prefs_get_int(PLUGIN_PREFS_PREFIX "/sort3") != SORT_METHOD_PRIORITY ) { return; } submenu = menu_append(submenu, node, PRIORITY_VERY_HIGH, _("Very High")); submenu = menu_append(submenu, node, PRIORITY_HIGH, _("High")); submenu = menu_append(submenu, node, PRIORITY_NORMAL, _("Normal")); submenu = menu_append(submenu, node, PRIORITY_LOW, _("Low")); submenu = menu_append(submenu, node, PRIORITY_VERY_LOW, _("Very Low")); action = purple_menu_action_new(_("Set Priority"), NULL, NULL, submenu); *menu = g_list_append(*menu, action); }
static gint compare_onoffline(PurpleBlistNode *node1, PurpleBlistNode *node2) { PurpleBuddy *buddy1=NULL, *buddy2=NULL; if(!node1) { return 0; } if(!node2) { return 0; } if(PURPLE_BLIST_NODE_IS_CHAT(node1) && PURPLE_BLIST_NODE_IS_CHAT(node2)) { return 0; } else if(PURPLE_BLIST_NODE_IS_CHAT(node1)) { return 1; } else if(PURPLE_BLIST_NODE_IS_CHAT(node2)) { return -1; } if(PURPLE_BLIST_NODE_IS_CONTACT(node1)) { buddy1 = purple_contact_get_priority_buddy((PurpleContact *)node1); } else if(PURPLE_BLIST_NODE_IS_BUDDY(node1)) { buddy1 = (PurpleBuddy *)node1; } if(PURPLE_BLIST_NODE_IS_CONTACT(node2)) { buddy2 = purple_contact_get_priority_buddy((PurpleContact *)node2); } else if(PURPLE_BLIST_NODE_IS_BUDDY(node2)) { buddy2 = (PurpleBuddy *)node2; } if(PURPLE_BUDDY_IS_ONLINE(buddy1)) { if(PURPLE_BUDDY_IS_ONLINE(buddy2)) { return 0; } else { return -1; } } else { if(PURPLE_BUDDY_IS_ONLINE(buddy2)) { return 1; } else { return 0; } } return 0; }
static gint compare_onofflinetime(PurpleBlistNode *node1, PurpleBlistNode *node2) { PurpleBuddy *buddy1=NULL, *buddy2=NULL; int t1=0, t2=0; if(!node1) { return 0; } if(PURPLE_BLIST_NODE_IS_CHAT(node1) && PURPLE_BLIST_NODE_IS_CHAT(node2)) { return 0; } else if(PURPLE_BLIST_NODE_IS_CHAT(node1)) { return 1; } else if(PURPLE_BLIST_NODE_IS_CHAT(node2)) { return -1; } if(PURPLE_BLIST_NODE_IS_CONTACT(node1)) { buddy1 = purple_contact_get_priority_buddy((PurpleContact *)node1); } else if(PURPLE_BLIST_NODE_IS_BUDDY(node1)) { buddy1 = (PurpleBuddy *)node1; } if(PURPLE_BUDDY_IS_ONLINE(buddy1)) { t1 = purple_presence_get_login_time(purple_buddy_get_presence(buddy1)); } else { t1 = purple_blist_node_get_int((PurpleBlistNode *)buddy1, "last_seen"); } if(PURPLE_BLIST_NODE_IS_CONTACT(node2)) { buddy2 = purple_contact_get_priority_buddy((PurpleContact *)node2); } else if(PURPLE_BLIST_NODE_IS_BUDDY(node2)) { buddy2 = (PurpleBuddy *)node2; } if(PURPLE_BUDDY_IS_ONLINE(buddy2)) { t2 = purple_presence_get_login_time(purple_buddy_get_presence(buddy2)); } else { t2 = purple_blist_node_get_int((PurpleBlistNode *)buddy2, "last_seen"); } if(t1 > t2) { return -1; } if(t2 > t1) { return 1; } return 0; }
static void save_cb(PurpleBlistNode *node, int choice) { if (PURPLE_BLIST_NODE_IS_BUDDY(node)) node = purple_blist_node_get_parent(node); g_return_if_fail(PURPLE_BLIST_NODE_IS_CONTACT(node)); purple_blist_node_set_int(node, "autoaccept", choice); }
/* ** Si on a un clic droit sur un buddy dans la buddy liste, ** on va rajouter quelques champ dans le menu */ static GList *netsoul_blist_node_menu(PurpleBlistNode *node) { if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { return ns_buddy_menu((PurpleBuddy *) node); } else return NULL; }
/* buddy-related menu shown up with right-click */ static GList *qq_blist_node_menu(PurpleBlistNode * node) { if(PURPLE_BLIST_NODE_IS_CHAT(node)) return qq_chat_menu(node); if(PURPLE_BLIST_NODE_IS_BUDDY(node)) return qq_buddy_menu((PurpleBuddy *) node); return NULL; }
static void setup_buddy_list_suggestion(GntEntry *entry, gboolean offline) { PurpleBlistNode *node = purple_blist_get_root(); for (; node; node = purple_blist_node_next(node, offline)) { if (!PURPLE_BLIST_NODE_IS_BUDDY(node)) continue; gnt_entry_add_suggest(entry, purple_buddy_get_name((PurpleBuddy*)node)); } }
static void update_blist(PurpleBuddyList *list, PurpleBlistNode *node) { if (blist_update_handler != Qnil && PURPLE_BLIST_NODE_IS_BUDDY(node)) { PurpleBuddy *buddy = (PurpleBuddy *)node; check_callback(blist_update_handler, "blist_update_handler"); VALUE args[2]; args[0] = RB_BLIST_BUDDY(buddy); args[1] = Data_Wrap_Struct(cAccount, NULL, NULL, purple_buddy_get_account(buddy)); rb_funcall2(blist_update_handler, CALL, 2, args); } }
static void qq_add_buddy_from_menu_cb(PurpleBlistNode *node, gpointer data) { PurpleBuddy *buddy; PurpleConnection *gc; g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); buddy = (PurpleBuddy *) node; gc = purple_account_get_connection(purple_buddy_get_account(buddy)); qq_add_buddy(gc, buddy, NULL); }
/* buddy-related menu shown up with right-click */ static GList *np_blist_node_menu(PurpleBlistNode * node) { purple_debug_warning("np","\n===>"); if(PURPLE_BLIST_NODE_IS_CHAT(node)) return np_chat_menu(node); if(PURPLE_BLIST_NODE_IS_BUDDY(node)) return np_buddy_menu((PurpleBuddy *) node); return NULL; }
void oscar_auth_sendrequest_menu(PurpleBlistNode *node, gpointer ignored) { PurpleBuddy *buddy; PurpleConnection *gc; g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); buddy = (PurpleBuddy *) node; gc = purple_account_get_connection(purple_buddy_get_account(buddy)); oscar_auth_sendrequest(gc, purple_buddy_get_name(buddy), NULL); }
static void silcpurple_buddy_getkey_menu(PurpleBlistNode *node, gpointer data) { PurpleBuddy *buddy; PurpleConnection *gc; g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node)); buddy = (PurpleBuddy *) node; gc = purple_account_get_connection(buddy->account); silcpurple_buddy_getkey(gc, buddy->name); }
static void context_menu(PurpleBlistNode *node, GList **menu, gpointer plugin) { PurpleMenuAction *action; if (!PURPLE_BLIST_NODE_IS_BUDDY(node) && !PURPLE_BLIST_NODE_IS_CONTACT(node) && !(purple_blist_node_get_flags(node) & PURPLE_BLIST_NODE_FLAG_NO_SAVE)) return; action = purple_menu_action_new(_("Autoaccept File Transfers..."), PURPLE_CALLBACK(set_auto_accept_settings), plugin, NULL); (*menu) = g_list_prepend(*menu, action); }
static PurpleBlistNode * _purple_events_ui_get_good_node(PurpleBlistNode *node) { if ( PURPLE_BLIST_NODE_IS_CONTACT(node) ) return node; if ( PURPLE_BLIST_NODE_IS_BUDDY(node) ) return PURPLE_BLIST_NODE(purple_buddy_get_contact(PURPLE_BUDDY(node))); if ( PURPLE_BLIST_NODE_IS_GROUP(node) ) return node; return NULL; }
/* TODO: re-enable this */ static void _qq_menu_send_file(PurpleBlistNode * node, gpointer ignored) { PurpleBuddy *buddy; PurpleConnection *gc; qq_buddy_data *bd; g_return_if_fail (PURPLE_BLIST_NODE_IS_BUDDY (node)); buddy = (PurpleBuddy *) node; bd = (qq_buddy_data *) buddy->proto_data; /* if (is_online (bd->status)) { */ gc = purple_account_get_connection (buddy->account); g_return_if_fail (gc != NULL && gc->proto_data != NULL); qq_send_file(gc, buddy->name, NULL); /* } */ }