void nick_set_raw(account_t *acc, const char *handle, const char *nick) { char *store_handle, *store_nick = g_malloc(MAX_NICK_LENGTH + 1); irc_t *irc = (irc_t *) acc->bee->ui_data; store_handle = clean_handle(handle); store_nick[MAX_NICK_LENGTH] = '\0'; strncpy(store_nick, nick, MAX_NICK_LENGTH); nick_strip(irc, store_nick); g_hash_table_replace(acc->nicks, store_handle, store_nick); }
/* Check is `msg' is meant for `nick'. */ int irc_nick_match(const char *nick, const char *msg) { char *stripnick, *stripmsg; int ret, len; g_return_val_if_fail(nick != NULL, FALSE); g_return_val_if_fail(msg != NULL, FALSE); if (g_strncasecmp(msg, nick, strlen(nick)) == 0 && !isalnum((int) msg[strlen(nick)])) return TRUE; stripnick = nick_strip(nick); stripmsg = nick_strip(msg); len = strlen(stripnick); ret = len > 0 && g_strncasecmp(stripmsg, stripnick, len) == 0 && !isalnum((int) stripmsg[len]) && (unsigned char) stripmsg[len] < 128; g_free(stripnick); g_free(stripmsg); return ret; }
char *nick_get(bee_user_t *bu) { static char nick[MAX_NICK_LENGTH + 1]; char *store_handle, *found_nick; irc_t *irc = (irc_t *) bu->bee->ui_data; memset(nick, 0, MAX_NICK_LENGTH + 1); store_handle = clean_handle(bu->handle); /* Find out if we stored a nick for this person already. If not, try to generate a sane nick automatically. */ if ((found_nick = g_hash_table_lookup(bu->ic->acc->nicks, store_handle))) { strncpy(nick, found_nick, MAX_NICK_LENGTH); } else if ((found_nick = nick_gen(bu))) { strncpy(nick, found_nick, MAX_NICK_LENGTH); g_free(found_nick); } else { /* Keep this fallback since nick_gen() can return NULL in some cases. */ char *s; g_snprintf(nick, MAX_NICK_LENGTH, "%s", bu->handle); if ((s = strchr(nick, '@'))) { while (*s) { *(s++) = 0; } } nick_strip(irc, nick); if (set_getbool(&bu->bee->set, "lcnicks")) { nick_lc(irc, nick); } } g_free(store_handle); /* Make sure the nick doesn't collide with an existing one by adding underscores and that kind of stuff, if necessary. */ nick_dedupe(bu, nick); return nick; }