CHAT_DCC_REC *dcc_chat_create(IRC_SERVER_REC *server, CHAT_DCC_REC *chat, const char *nick, const char *arg) { CHAT_DCC_REC *dcc; dcc = g_new0(CHAT_DCC_REC, 1); dcc->orig_type = dcc->type = DCC_CHAT_TYPE; dcc->mirc_ctcp = settings_get_bool("dcc_mirc_ctcp"); dcc->id = dcc_chat_get_new_id(nick); dcc_init_rec(DCC(dcc), server, chat, nick, arg); return dcc; }
CHAT_DCC_REC *dcc_chat_create(IRC_SERVER_REC *server, CHAT_DCC_REC *chat, const char *nick, const char *arg) { CHAT_DCC_REC *dcc; dcc = g_new0(CHAT_DCC_REC, 1); dcc->orig_type = dcc->type = DCC_CHAT_TYPE; dcc->mirc_ctcp = settings_get_bool("dcc_mirc_ctcp"); dcc->id = dcc_chat_get_new_id(nick); dcc_init_rec(DCC(dcc), server, chat, nick, arg); if (dcc->module_data == NULL) { /* failed to successfully init; TODO: change init_rec API */ g_free(dcc->id); g_free(dcc); return NULL; } return dcc; }
static void event_nick(IRC_SERVER_REC *server, const char *data, const char *orignick) { QUERY_REC *query; CHAT_DCC_REC *dcc; char *params, *nick, *tag; g_return_if_fail(data != NULL); g_return_if_fail(orignick != NULL); params = event_get_params(data, 1, &nick); if (g_ascii_strcasecmp(nick, orignick) == 0) { /* shouldn't happen, but just to be sure irssi doesn't get into infinite loop */ g_free(params); return; } while ((dcc = dcc_chat_find_nick(server, orignick)) != NULL) { g_free(dcc->nick); dcc->nick = g_strdup(nick); tag = g_strconcat("=", dcc->id, NULL); query = irc_query_find(server, tag); g_free(tag); /* change the id too */ g_free(dcc->id); dcc->id = NULL; dcc->id = dcc_chat_get_new_id(nick); if (query != NULL) { tag = g_strconcat("=", dcc->id, NULL); query_change_nick(query, tag); g_free(tag); } } g_free(params); }