X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/832942858cbc9d9f3d34caa7ea3be26d89360ee6..92ee45c4b8cfd8d5b3d04b4c2565319e1743a6dd:/src/channel.c diff --git a/src/channel.c b/src/channel.c index c0fdcc3..52e4b50 100644 --- a/src/channel.c +++ b/src/channel.c @@ -25,14 +25,13 @@ */ #include "stdinc.h" -#include "tools.h" #include "channel.h" +#include "chmode.h" #include "client.h" #include "common.h" #include "hash.h" #include "hook.h" -#include "irc_string.h" -#include "sprintf_irc.h" +#include "match.h" #include "ircd.h" #include "numeric.h" #include "s_serv.h" /* captab */ @@ -41,18 +40,14 @@ #include "whowas.h" #include "s_conf.h" /* ConfigFileEntry, ConfigChannel */ #include "s_newconf.h" -#include "event.h" -#include "memory.h" -#include "balloc.h" -#include "s_log.h" +#include "logger.h" -extern dlink_list global_channel_list; - -extern struct config_channel_entry ConfigChannel; -extern BlockHeap *channel_heap; -extern BlockHeap *ban_heap; -extern BlockHeap *topic_heap; -extern BlockHeap *member_heap; +struct config_channel_entry ConfigChannel; +rb_dlink_list global_channel_list; +static rb_bh *channel_heap; +static rb_bh *ban_heap; +static rb_bh *topic_heap; +static rb_bh *member_heap; static int channel_capabs[] = { CAP_EX, CAP_IE, CAP_SERVICE, @@ -77,10 +72,10 @@ static int h_can_join; void init_channels(void) { - channel_heap = BlockHeapCreate(sizeof(struct Channel), CHANNEL_HEAP_SIZE); - ban_heap = BlockHeapCreate(sizeof(struct Ban), BAN_HEAP_SIZE); - topic_heap = BlockHeapCreate(TOPICLEN + 1 + USERHOST_REPLYLEN, TOPIC_HEAP_SIZE); - member_heap = BlockHeapCreate(sizeof(struct membership), MEMBER_HEAP_SIZE); + channel_heap = rb_bh_create(sizeof(struct Channel), CHANNEL_HEAP_SIZE, "channel_heap"); + ban_heap = rb_bh_create(sizeof(struct Ban), BAN_HEAP_SIZE, "ban_heap"); + topic_heap = rb_bh_create(TOPICLEN + 1 + USERHOST_REPLYLEN, TOPIC_HEAP_SIZE, "topic_heap"); + member_heap = rb_bh_create(sizeof(struct membership), MEMBER_HEAP_SIZE, "member_heap"); h_can_join = register_hook("can_join"); } @@ -92,25 +87,25 @@ struct Channel * allocate_channel(const char *chname) { struct Channel *chptr; - chptr = BlockHeapAlloc(channel_heap); - DupString(chptr->chname, chname); + chptr = rb_bh_alloc(channel_heap); + chptr->chname = rb_strdup(chname); return (chptr); } void free_channel(struct Channel *chptr) { - MyFree(chptr->chname); - BlockHeapFree(channel_heap, chptr); + rb_free(chptr->chname); + rb_bh_free(channel_heap, chptr); } struct Ban * allocate_ban(const char *banstr, const char *who) { struct Ban *bptr; - bptr = BlockHeapAlloc(ban_heap); - DupString(bptr->banstr, banstr); - DupString(bptr->who, who); + bptr = rb_bh_alloc(ban_heap); + bptr->banstr = rb_strdup(banstr); + bptr->who = rb_strdup(who); return (bptr); } @@ -118,9 +113,9 @@ allocate_ban(const char *banstr, const char *who) void free_ban(struct Ban *bptr) { - MyFree(bptr->banstr); - MyFree(bptr->who); - BlockHeapFree(ban_heap, bptr); + rb_free(bptr->banstr); + rb_free(bptr->who); + rb_bh_free(ban_heap, bptr); } @@ -134,7 +129,7 @@ struct membership * find_channel_membership(struct Channel *chptr, struct Client *client_p) { struct membership *msptr; - dlink_node *ptr; + rb_dlink_node *ptr; if(!IsClient(client_p)) return NULL; @@ -142,9 +137,9 @@ find_channel_membership(struct Channel *chptr, struct Client *client_p) /* Pick the most efficient list to use to be nice to things like * CHANSERV which could be in a large number of channels */ - if(dlink_list_length(&chptr->members) < dlink_list_length(&client_p->user->channel)) + if(rb_dlink_list_length(&chptr->members) < rb_dlink_list_length(&client_p->user->channel)) { - DLINK_FOREACH(ptr, chptr->members.head) + RB_DLINK_FOREACH(ptr, chptr->members.head) { msptr = ptr->data; @@ -154,7 +149,7 @@ find_channel_membership(struct Channel *chptr, struct Client *client_p) } else { - DLINK_FOREACH(ptr, client_p->user->channel.head) + RB_DLINK_FOREACH(ptr, client_p->user->channel.head) { msptr = ptr->data; @@ -209,17 +204,17 @@ add_user_to_channel(struct Channel *chptr, struct Client *client_p, int flags) if(client_p->user == NULL) return; - msptr = BlockHeapAlloc(member_heap); + msptr = rb_bh_alloc(member_heap); msptr->chptr = chptr; msptr->client_p = client_p; msptr->flags = flags; - dlinkAdd(msptr, &msptr->usernode, &client_p->user->channel); - dlinkAdd(msptr, &msptr->channode, &chptr->members); + rb_dlinkAdd(msptr, &msptr->usernode, &client_p->user->channel); + rb_dlinkAdd(msptr, &msptr->channode, &chptr->members); if(MyClient(client_p)) - dlinkAdd(msptr, &msptr->locchannode, &chptr->locmembers); + rb_dlinkAdd(msptr, &msptr->locchannode, &chptr->locmembers); } /* remove_user_from_channel() @@ -240,18 +235,16 @@ remove_user_from_channel(struct membership *msptr) client_p = msptr->client_p; chptr = msptr->chptr; - dlinkDelete(&msptr->usernode, &client_p->user->channel); - dlinkDelete(&msptr->channode, &chptr->members); + rb_dlinkDelete(&msptr->usernode, &client_p->user->channel); + rb_dlinkDelete(&msptr->channode, &chptr->members); if(client_p->servptr == &me) - dlinkDelete(&msptr->locchannode, &chptr->locmembers); - - chptr->users_last = CurrentTime; + rb_dlinkDelete(&msptr->locchannode, &chptr->locmembers); - if(!(chptr->mode.mode & MODE_PERMANENT) && dlink_list_length(&chptr->members) <= 0) + if(!(chptr->mode.mode & MODE_PERMANENT) && rb_dlink_list_length(&chptr->members) <= 0) destroy_channel(chptr); - BlockHeapFree(member_heap, msptr); + rb_bh_free(member_heap, msptr); return; } @@ -267,28 +260,26 @@ remove_user_from_channels(struct Client *client_p) { struct Channel *chptr; struct membership *msptr; - dlink_node *ptr; - dlink_node *next_ptr; + rb_dlink_node *ptr; + rb_dlink_node *next_ptr; if(client_p == NULL) return; - DLINK_FOREACH_SAFE(ptr, next_ptr, client_p->user->channel.head) + RB_DLINK_FOREACH_SAFE(ptr, next_ptr, client_p->user->channel.head) { msptr = ptr->data; chptr = msptr->chptr; - dlinkDelete(&msptr->channode, &chptr->members); + rb_dlinkDelete(&msptr->channode, &chptr->members); if(client_p->servptr == &me) - dlinkDelete(&msptr->locchannode, &chptr->locmembers); + rb_dlinkDelete(&msptr->locchannode, &chptr->locmembers); - chptr->users_last = CurrentTime; - - if(!(chptr->mode.mode & MODE_PERMANENT) && dlink_list_length(&chptr->members) <= 0) + if(!(chptr->mode.mode & MODE_PERMANENT) && rb_dlink_list_length(&chptr->members) <= 0) destroy_channel(chptr); - BlockHeapFree(member_heap, msptr); + rb_bh_free(member_heap, msptr); } client_p->user->channel.head = client_p->user->channel.tail = NULL; @@ -306,12 +297,12 @@ void invalidate_bancache_user(struct Client *client_p) { struct membership *msptr; - dlink_node *ptr; + rb_dlink_node *ptr; if(client_p == NULL) return; - DLINK_FOREACH(ptr, client_p->user->channel.head) + RB_DLINK_FOREACH(ptr, client_p->user->channel.head) { msptr = ptr->data; msptr->bants = 0; @@ -343,18 +334,18 @@ check_channel_name(const char *name) /* free_channel_list() * - * input - dlink list to free + * input - rb_dlink list to free * output - * side effects - list of b/e/I modes is cleared */ void -free_channel_list(dlink_list * list) +free_channel_list(rb_dlink_list * list) { - dlink_node *ptr; - dlink_node *next_ptr; + rb_dlink_node *ptr; + rb_dlink_node *next_ptr; struct Ban *actualBan; - DLINK_FOREACH_SAFE(ptr, next_ptr, list->head) + RB_DLINK_FOREACH_SAFE(ptr, next_ptr, list->head) { actualBan = ptr->data; free_ban(actualBan); @@ -373,9 +364,9 @@ free_channel_list(dlink_list * list) void destroy_channel(struct Channel *chptr) { - dlink_node *ptr, *next_ptr; + rb_dlink_node *ptr, *next_ptr; - DLINK_FOREACH_SAFE(ptr, next_ptr, chptr->invites.head) + RB_DLINK_FOREACH_SAFE(ptr, next_ptr, chptr->invites.head) { del_invite(chptr, ptr->data); } @@ -389,7 +380,7 @@ destroy_channel(struct Channel *chptr) /* Free the topic */ free_topic(chptr); - dlinkDelete(&chptr->node, &global_channel_list); + rb_dlinkDelete(&chptr->node, &global_channel_list); del_from_channel_hash(chptr->chname, chptr); free_channel(chptr); } @@ -421,7 +412,7 @@ channel_member_names(struct Channel *chptr, struct Client *client_p, int show_eo { struct membership *msptr; struct Client *target_p; - dlink_node *ptr; + rb_dlink_node *ptr; char lbuf[BUFSIZE]; char *t; int mlen; @@ -434,13 +425,13 @@ channel_member_names(struct Channel *chptr, struct Client *client_p, int show_eo { is_member = IsMember(client_p, chptr); - cur_len = mlen = ircsprintf(lbuf, form_str(RPL_NAMREPLY), + cur_len = mlen = rb_sprintf(lbuf, form_str(RPL_NAMREPLY), me.name, client_p->name, channel_pub_or_secret(chptr), chptr->chname); t = lbuf + cur_len; - DLINK_FOREACH(ptr, chptr->members.head) + RB_DLINK_FOREACH(ptr, chptr->members.head) { msptr = ptr->data; target_p = msptr->client_p; @@ -457,7 +448,7 @@ channel_member_names(struct Channel *chptr, struct Client *client_p, int show_eo t = lbuf + mlen; } - tlen = ircsprintf(t, "%s%s ", find_channel_status(msptr, stack), + tlen = rb_sprintf(t, "%s%s ", find_channel_status(msptr, stack), target_p->name); cur_len += tlen; @@ -492,8 +483,8 @@ channel_member_names(struct Channel *chptr, struct Client *client_p, int show_eo void del_invite(struct Channel *chptr, struct Client *who) { - dlinkFindDestroy(who, &chptr->invites); - dlinkFindDestroy(chptr, &who->user->invited); + rb_dlinkFindDestroy(who, &chptr->invites); + rb_dlinkFindDestroy(chptr, &who->user->invited); } /* is_banned() @@ -511,7 +502,7 @@ is_banned(struct Channel *chptr, struct Client *who, struct membership *msptr, char src_iphost[NICKLEN + USERLEN + HOSTLEN + 6]; char src_althost[NICKLEN + USERLEN + HOSTLEN + 6]; char *s3 = NULL; - dlink_node *ptr; + rb_dlink_node *ptr; struct Ban *actualBan = NULL; struct Ban *actualExcept = NULL; @@ -521,8 +512,8 @@ is_banned(struct Channel *chptr, struct Client *who, struct membership *msptr, /* if the buffers havent been built, do it here */ if(s == NULL) { - ircsprintf(src_host, "%s!%s@%s", who->name, who->username, who->host); - ircsprintf(src_iphost, "%s!%s@%s", who->name, who->username, who->sockhost); + rb_sprintf(src_host, "%s!%s@%s", who->name, who->username, who->host); + rb_sprintf(src_iphost, "%s!%s@%s", who->name, who->username, who->sockhost); s = src_host; s2 = src_iphost; @@ -532,19 +523,19 @@ is_banned(struct Channel *chptr, struct Client *who, struct membership *msptr, /* if host mangling mode enabled, also check their real host */ if(!strcmp(who->host, who->localClient->mangledhost)) { - ircsprintf(src_althost, "%s!%s@%s", who->name, who->username, who->orighost); + rb_sprintf(src_althost, "%s!%s@%s", who->name, who->username, who->orighost); s3 = src_althost; } /* if host mangling mode not enabled and no other spoof, * also check the mangled form of their host */ else if (!IsDynSpoof(who)) { - ircsprintf(src_althost, "%s!%s@%s", who->name, who->username, who->localClient->mangledhost); + rb_sprintf(src_althost, "%s!%s@%s", who->name, who->username, who->localClient->mangledhost); s3 = src_althost; } } - DLINK_FOREACH(ptr, chptr->banlist.head) + RB_DLINK_FOREACH(ptr, chptr->banlist.head) { actualBan = ptr->data; if(match(actualBan->banstr, s) || @@ -559,7 +550,7 @@ is_banned(struct Channel *chptr, struct Client *who, struct membership *msptr, if((actualBan != NULL) && ConfigChannel.use_except) { - DLINK_FOREACH(ptr, chptr->exceptlist.head) + RB_DLINK_FOREACH(ptr, chptr->exceptlist.head) { actualExcept = ptr->data; @@ -617,7 +608,7 @@ is_quieted(struct Channel *chptr, struct Client *who, struct membership *msptr, char src_iphost[NICKLEN + USERLEN + HOSTLEN + 6]; char src_althost[NICKLEN + USERLEN + HOSTLEN + 6]; char *s3 = NULL; - dlink_node *ptr; + rb_dlink_node *ptr; struct Ban *actualBan = NULL; struct Ban *actualExcept = NULL; @@ -627,8 +618,8 @@ is_quieted(struct Channel *chptr, struct Client *who, struct membership *msptr, /* if the buffers havent been built, do it here */ if(s == NULL) { - ircsprintf(src_host, "%s!%s@%s", who->name, who->username, who->host); - ircsprintf(src_iphost, "%s!%s@%s", who->name, who->username, who->sockhost); + rb_sprintf(src_host, "%s!%s@%s", who->name, who->username, who->host); + rb_sprintf(src_iphost, "%s!%s@%s", who->name, who->username, who->sockhost); s = src_host; s2 = src_iphost; @@ -638,19 +629,19 @@ is_quieted(struct Channel *chptr, struct Client *who, struct membership *msptr, /* if host mangling mode enabled, also check their real host */ if(!strcmp(who->host, who->localClient->mangledhost)) { - ircsprintf(src_althost, "%s!%s@%s", who->name, who->username, who->orighost); + rb_sprintf(src_althost, "%s!%s@%s", who->name, who->username, who->orighost); s3 = src_althost; } /* if host mangling mode not enabled and no other spoof, * also check the mangled form of their host */ else if (!IsDynSpoof(who)) { - ircsprintf(src_althost, "%s!%s@%s", who->name, who->username, who->localClient->mangledhost); + rb_sprintf(src_althost, "%s!%s@%s", who->name, who->username, who->localClient->mangledhost); s3 = src_althost; } } - DLINK_FOREACH(ptr, chptr->quietlist.head) + RB_DLINK_FOREACH(ptr, chptr->quietlist.head) { actualBan = ptr->data; if(match(actualBan->banstr, s) || @@ -665,7 +656,7 @@ is_quieted(struct Channel *chptr, struct Client *who, struct membership *msptr, if((actualBan != NULL) && ConfigChannel.use_except) { - DLINK_FOREACH(ptr, chptr->exceptlist.head) + RB_DLINK_FOREACH(ptr, chptr->exceptlist.head) { actualExcept = ptr->data; @@ -717,8 +708,8 @@ is_quieted(struct Channel *chptr, struct Client *who, struct membership *msptr, int can_join(struct Client *source_p, struct Channel *chptr, char *key) { - dlink_node *invite = NULL; - dlink_node *ptr; + rb_dlink_node *invite = NULL; + rb_dlink_node *ptr; struct Ban *invex = NULL; char src_host[NICKLEN + USERLEN + HOSTLEN + 6]; char src_iphost[NICKLEN + USERLEN + HOSTLEN + 6]; @@ -729,21 +720,21 @@ can_join(struct Client *source_p, struct Channel *chptr, char *key) s_assert(source_p->localClient != NULL); - ircsprintf(src_host, "%s!%s@%s", source_p->name, source_p->username, source_p->host); - ircsprintf(src_iphost, "%s!%s@%s", source_p->name, source_p->username, source_p->sockhost); + rb_sprintf(src_host, "%s!%s@%s", source_p->name, source_p->username, source_p->host); + rb_sprintf(src_iphost, "%s!%s@%s", source_p->name, source_p->username, source_p->sockhost); if(source_p->localClient->mangledhost != NULL) { /* if host mangling mode enabled, also check their real host */ if(!strcmp(source_p->host, source_p->localClient->mangledhost)) { - ircsprintf(src_althost, "%s!%s@%s", source_p->name, source_p->username, source_p->orighost); + rb_sprintf(src_althost, "%s!%s@%s", source_p->name, source_p->username, source_p->orighost); use_althost = 1; } /* if host mangling mode not enabled and no other spoof, * also check the mangled form of their host */ else if (!IsDynSpoof(source_p)) { - ircsprintf(src_althost, "%s!%s@%s", source_p->name, source_p->username, source_p->localClient->mangledhost); + rb_sprintf(src_althost, "%s!%s@%s", source_p->name, source_p->username, source_p->localClient->mangledhost); use_althost = 1; } } @@ -753,7 +744,7 @@ can_join(struct Client *source_p, struct Channel *chptr, char *key) if(chptr->mode.mode & MODE_INVITEONLY) { - DLINK_FOREACH(invite, source_p->user->invited.head) + RB_DLINK_FOREACH(invite, source_p->user->invited.head) { if(invite->data == chptr) break; @@ -762,7 +753,7 @@ can_join(struct Client *source_p, struct Channel *chptr, char *key) { if(!ConfigChannel.use_invex) return (ERR_INVITEONLYCHAN); - DLINK_FOREACH(ptr, chptr->invexlist.head) + RB_DLINK_FOREACH(ptr, chptr->invexlist.head) { invex = ptr->data; if(match(invex->banstr, src_host) @@ -781,14 +772,14 @@ can_join(struct Client *source_p, struct Channel *chptr, char *key) return (ERR_BADCHANNELKEY); if(chptr->mode.limit && - dlink_list_length(&chptr->members) >= (unsigned long) chptr->mode.limit) + rb_dlink_list_length(&chptr->members) >= (unsigned long) chptr->mode.limit) i = ERR_CHANNELISFULL; if(chptr->mode.mode & MODE_REGONLY && EmptyString(source_p->user->suser)) i = ERR_NEEDREGGEDNICK; /* join throttling stuff --nenolod */ else if(chptr->mode.join_num > 0 && chptr->mode.join_time > 0) { - if ((CurrentTime - chptr->join_delta <= + if ((rb_current_time() - chptr->join_delta <= chptr->mode.join_time) && (chptr->join_count >= chptr->mode.join_num)) i = ERR_THROTTLE; @@ -797,7 +788,7 @@ can_join(struct Client *source_p, struct Channel *chptr, char *key) /* allow /invite to override +l/+r/+j also -- jilles */ if (i != 0 && invite == NULL) { - DLINK_FOREACH(invite, source_p->user->invited.head) + RB_DLINK_FOREACH(invite, source_p->user->invited.head) { if(invite->data == chptr) break; @@ -879,17 +870,17 @@ find_bannickchange_channel(struct Client *client_p) { struct Channel *chptr; struct membership *msptr; - dlink_node *ptr; + rb_dlink_node *ptr; char src_host[NICKLEN + USERLEN + HOSTLEN + 6]; char src_iphost[NICKLEN + USERLEN + HOSTLEN + 6]; if (!MyClient(client_p)) return NULL; - ircsprintf(src_host, "%s!%s@%s", client_p->name, client_p->username, client_p->host); - ircsprintf(src_iphost, "%s!%s@%s", client_p->name, client_p->username, client_p->sockhost); + rb_sprintf(src_host, "%s!%s@%s", client_p->name, client_p->username, client_p->host); + rb_sprintf(src_iphost, "%s!%s@%s", client_p->name, client_p->username, client_p->sockhost); - DLINK_FOREACH(ptr, client_p->user->channel.head) + RB_DLINK_FOREACH(ptr, client_p->user->channel.head) { msptr = ptr->data; chptr = msptr->chptr; @@ -931,12 +922,12 @@ check_spambot_warning(struct Client *source_p, const char *name) { /* Its already known as a possible spambot */ if(name != NULL) - sendto_realops_snomask(SNO_BOTS, L_ALL, + sendto_realops_snomask(SNO_BOTS, L_NETWIDE, "User %s (%s@%s) trying to join %s is a possible spambot", source_p->name, source_p->username, source_p->orighost, name); else - sendto_realops_snomask(SNO_BOTS, L_ALL, + sendto_realops_snomask(SNO_BOTS, L_NETWIDE, "User %s (%s@%s) is a possible spambot", source_p->name, source_p->username, source_p->orighost); @@ -946,7 +937,7 @@ check_spambot_warning(struct Client *source_p, const char *name) else { if((t_delta = - (CurrentTime - source_p->localClient->last_leave_time)) > + (rb_current_time() - source_p->localClient->last_leave_time)) > JOIN_LEAVE_COUNT_EXPIRE_TIME) { decrement_count = (t_delta / JOIN_LEAVE_COUNT_EXPIRE_TIME); @@ -957,7 +948,7 @@ check_spambot_warning(struct Client *source_p, const char *name) } else { - if((CurrentTime - + if((rb_current_time() - (source_p->localClient->last_join_time)) < GlobalSetOptions.spam_time) { /* oh, its a possible spambot */ @@ -965,9 +956,9 @@ check_spambot_warning(struct Client *source_p, const char *name) } } if(name != NULL) - source_p->localClient->last_join_time = CurrentTime; + source_p->localClient->last_join_time = rb_current_time(); else - source_p->localClient->last_leave_time = CurrentTime; + source_p->localClient->last_leave_time = rb_current_time(); } } @@ -993,7 +984,7 @@ check_splitmode(void *unused) splitmode = 1; sendto_realops_snomask(SNO_GENERAL, L_ALL, "Network split, activating splitmode"); - eventAddIsh("check_splitmode", check_splitmode, NULL, 2); + check_splitmode_ev = rb_event_addish("check_splitmode", check_splitmode, NULL, 2); } } /* in splitmode, check whether its finished */ @@ -1004,7 +995,8 @@ check_splitmode(void *unused) sendto_realops_snomask(SNO_GENERAL, L_ALL, "Network rejoined, deactivating splitmode"); - eventDelete(check_splitmode, NULL); + rb_event_delete(check_splitmode_ev); + check_splitmode_ev = NULL; } } } @@ -1024,7 +1016,7 @@ allocate_topic(struct Channel *chptr) if(chptr == NULL) return; - ptr = BlockHeapAlloc(topic_heap); + ptr = rb_bh_alloc(topic_heap); /* Basically we allocate one large block for the topic and * the topic info. We then split it up into two and shove it @@ -1054,7 +1046,7 @@ free_topic(struct Channel *chptr) * MUST change this as well */ ptr = chptr->topic; - BlockHeapFree(topic_heap, ptr); + rb_bh_free(topic_heap, ptr); chptr->topic = NULL; chptr->topic_info = NULL; } @@ -1072,8 +1064,8 @@ set_channel_topic(struct Channel *chptr, const char *topic, const char *topic_in { if(chptr->topic == NULL) allocate_topic(chptr); - strlcpy(chptr->topic, topic, TOPICLEN + 1); - strlcpy(chptr->topic_info, topic_info, USERHOST_REPLYLEN); + rb_strlcpy(chptr->topic, topic, TOPICLEN + 1); + rb_strlcpy(chptr->topic_info, topic_info, USERHOST_REPLYLEN); chptr->topic_time = topicts; } else @@ -1084,29 +1076,6 @@ set_channel_topic(struct Channel *chptr, const char *topic, const char *topic_in } } -static const struct mode_letter -{ - const unsigned int mode; - const unsigned char letter; -} flags[] = -{ - {MODE_INVITEONLY, 'i'}, - {MODE_MODERATED, 'm'}, - {MODE_NOPRIVMSGS, 'n'}, - {MODE_PRIVATE, 'p'}, - {MODE_SECRET, 's'}, - {MODE_TOPICLIMIT, 't'}, - {MODE_NOCOLOR, 'c'}, - {MODE_FREEINVITE, 'g'}, - {MODE_OPMODERATE, 'z'}, - {MODE_EXLIMIT, 'L'}, - {MODE_PERMANENT, 'P'}, - {MODE_FREETARGET, 'F'}, - {MODE_DISFORWARD, 'Q'}, - {MODE_REGONLY, 'r'}, - {0, '\0'} -}; - /* channel_modes() * * inputs - pointer to channel @@ -1129,16 +1098,16 @@ channel_modes(struct Channel *chptr, struct Client *client_p) *mbuf++ = '+'; *pbuf = '\0'; - for (i = 0; flags[i].mode; ++i) - if(chptr->mode.mode & flags[i].mode) - *mbuf++ = flags[i].letter; + for (i = 0; i < 256; i++) + if(chptr->mode.mode & chmode_flags[i]) + *mbuf++ = i; if(chptr->mode.limit) { *mbuf++ = 'l'; if(!IsClient(client_p) || IsMember(client_p, chptr)) - pbuf += ircsprintf(pbuf, " %d", chptr->mode.limit); + pbuf += rb_sprintf(pbuf, " %d", chptr->mode.limit); } if(*chptr->mode.key) @@ -1146,7 +1115,7 @@ channel_modes(struct Channel *chptr, struct Client *client_p) *mbuf++ = 'k'; if(pbuf > buf2 || !IsClient(client_p) || IsMember(client_p, chptr)) - pbuf += ircsprintf(pbuf, " %s", chptr->mode.key); + pbuf += rb_sprintf(pbuf, " %s", chptr->mode.key); } if(chptr->mode.join_num) @@ -1154,7 +1123,7 @@ channel_modes(struct Channel *chptr, struct Client *client_p) *mbuf++ = 'j'; if(pbuf > buf2 || !IsClient(client_p) || IsMember(client_p, chptr)) - pbuf += ircsprintf(pbuf, " %d:%d", chptr->mode.join_num, + pbuf += rb_sprintf(pbuf, " %d:%d", chptr->mode.join_num, chptr->mode.join_time); } @@ -1163,13 +1132,13 @@ channel_modes(struct Channel *chptr, struct Client *client_p) *mbuf++ = 'f'; if(pbuf > buf2 || !IsClient(client_p) || IsMember(client_p, chptr)) - pbuf += ircsprintf(pbuf, " %s", chptr->mode.forward); + pbuf += rb_sprintf(pbuf, " %s", chptr->mode.forward); } *mbuf = '\0'; - strlcpy(final, buf1, sizeof final); - strlcat(final, buf2, sizeof final); + rb_strlcpy(final, buf1, sizeof final); + rb_strlcat(final, buf2, sizeof final); return final; } @@ -1312,13 +1281,9 @@ send_cap_mode_changes(struct Client *client_p, struct Client *source_p, cap = chcap_combos[j].cap_yes; nocap = chcap_combos[j].cap_no; - if(cap & CAP_TS6) - mbl = preflen = ircsprintf(modebuf, ":%s TMODE %ld %s ", - use_id(source_p), (long) chptr->channelts, - chptr->chname); - else - mbl = preflen = ircsprintf(modebuf, ":%s MODE %s ", - source_p->name, chptr->chname); + mbl = preflen = rb_sprintf(modebuf, ":%s TMODE %ld %s ", + use_id(source_p), (long) chptr->channelts, + chptr->chname); /* loop the list of - modes we have */ for (i = 0; i < mode_count; i++) @@ -1332,7 +1297,7 @@ send_cap_mode_changes(struct Client *client_p, struct Client *source_p, || ((nocap & mode_changes[i].nocaps) != mode_changes[i].nocaps)) continue; - if((cap & CAP_TS6) && !EmptyString(mode_changes[i].id)) + if(!EmptyString(mode_changes[i].id)) arg = mode_changes[i].id; else arg = mode_changes[i].arg; @@ -1381,7 +1346,7 @@ send_cap_mode_changes(struct Client *client_p, struct Client *source_p, if(arg != NULL) { - len = ircsprintf(pbuf, "%s ", arg); + len = rb_sprintf(pbuf, "%s ", arg); pbuf += len; pbl += len; mc++;