[srvx-commits] CVS: services/src hash.c,1.121.2.13,1.121.2.14 hash.h,1.52.2.9,1.52.2.10 parse.c,1.11
Brought to you by:
entrope
From: Entrope <en...@us...> - 2001-09-04 18:39:38
|
Update of /cvsroot/srvx/services/src In directory usw-pr-cvs1:/tmp/cvs-serv21250/src Modified Files: Tag: rel-1_0 hash.c hash.h parse.c Log Message: add nick change callback functions when handling remote JOINs and other crazy channels, inherit timestamp from next MODE change Index: hash.c =================================================================== RCS file: /cvsroot/srvx/services/src/hash.c,v retrieving revision 1.121.2.13 retrieving revision 1.121.2.14 diff -C2 -r1.121.2.13 -r1.121.2.14 *** hash.c 2001/08/04 15:34:25 1.121.2.13 --- hash.c 2001/09/04 18:39:36 1.121.2.14 *************** *** 307,310 **** --- 307,329 ---- } + static nick_change_func_t *ncf2_list; + static unsigned int ncf2_size = 0, ncf2_used = 0; + + void + reg_nick_change_func(nick_change_func_t handler) + { + if (ncf2_used == ncf2_size) { + if (ncf2_size) { + ncf2_size <<= 1; + ncf2_list = realloc(ncf2_list, ncf2_size*sizeof(nick_change_func_t)); + } else { + ncf2_size = 8; + ncf2_list = malloc(ncf2_size*sizeof(nick_change_func_t)); + } + } + ncf2_list[ncf2_used++] = handler; + } + + static del_user_func_t *duf_list; static unsigned int duf_size = 0, duf_used = 0; *************** *** 473,476 **** --- 492,498 ---- void NickChange(userNode* user, const char *new_nick) { + char old_nick[NICKLEN+1]; + unsigned int nn; + /* don't do anything if there's no change */ if (!strncmp(new_nick, user->nick, NICKLEN)) return; *************** *** 479,482 **** --- 501,507 ---- dict_remove(clients, user->nick); + /* save old nick for callbacks */ + safestrncpy(old_nick, user->nick, sizeof(old_nick)); + /* copy new nick */ safestrncpy(user->nick, new_nick, sizeof(user->nick)); *************** *** 486,489 **** --- 511,519 ---- if (IsLocal(user->numeric)) irc_nick(user); + + /* make callbacks */ + for (nn=0; nn<ncf2_used; nn++) { + ncf2_list[nn](user, old_nick); + } } *************** *** 644,648 **** mod_chanmode(cNode, modes, (char *)key, limit); ! if (new || cNode->timestamp > time_) { if (key) { safestrncpy(cNode->key, key, sizeof(cNode->key)); --- 674,678 ---- mod_chanmode(cNode, modes, (char *)key, limit); ! if (new || (cNode->timestamp == 0) || (cNode->timestamp > time_)) { if (key) { safestrncpy(cNode->key, key, sizeof(cNode->key)); Index: hash.h =================================================================== RCS file: /cvsroot/srvx/services/src/hash.h,v retrieving revision 1.52.2.9 retrieving revision 1.52.2.10 diff -C2 -r1.52.2.9 -r1.52.2.10 *** hash.h 2001/08/04 14:14:45 1.52.2.9 --- hash.h 2001/09/04 18:39:36 1.52.2.10 *************** *** 190,193 **** --- 190,195 ---- void DelUser(userNode* user, userNode *killer, int announce, const char *why); void ReintroduceUser(userNode* user); + typedef void (*nick_change_func_t)(struct userNode *user, const char *oldnick); + void reg_nick_change_func(nick_change_func_t handler); void NickChange(userNode* user, const char *new_nick); Index: parse.c =================================================================== RCS file: /cvsroot/srvx/services/src/Attic/parse.c,v retrieving revision 1.113.2.16 retrieving revision 1.113.2.17 diff -C2 -r1.113.2.16 -r1.113.2.17 *** parse.c 2001/08/16 02:39:18 1.113.2.16 --- parse.c 2001/09/04 18:39:36 1.113.2.17 *************** *** 576,580 **** struct userNode *un = data; struct chanNode *cn; ! cn = AddChannel(name, now, "", "", 0, un->numeric, NULL); if (cn->members.used == 1) { struct modeNode *mn = GetUserMode(cn, un); --- 576,580 ---- struct userNode *un = data; struct chanNode *cn; ! cn = AddChannel(name, 0, "", "", 0, un->numeric, NULL); if (cn->members.used == 1) { struct modeNode *mn = GetUserMode(cn, un); |