From 1f38d54b398e5328840f2f8a9af0e850a4ae5016 Mon Sep 17 00:00:00 2001 From: emmett1 Date: Wed, 8 Apr 2026 23:04:55 +0800 Subject: fix some channels not auto join --- sirc.c | 47 ++++++++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/sirc.c b/sirc.c index 32d9b5f..c8d7879 100644 --- a/sirc.c +++ b/sirc.c @@ -1110,16 +1110,24 @@ static int srv_alloc(void) { } static void srv_add_autojoin(int si, const char *chanlist) { - char tmp[512]; strncpy(tmp,chanlist,511); - char *tok=strtok(tmp,","); + char tmp[MAX_LINE]; strncpy(tmp, chanlist, MAX_LINE-1); + char *tok = strtok(tmp, ","); while (tok) { - while (*tok==' ') tok++; - if (*tok && g_srv[si].autojoin_count tok && *end == ' ') *end-- = '\0'; + if (*tok && g_srv[si].autojoin_count < MAX_AUTOJOIN) { + char ch[MAX_CHAN]; strncpy(ch, tok, MAX_CHAN-1); + if (ch[0] != '#') { memmove(ch+1, ch, strlen(ch)+1); ch[0]='#'; } + /* avoid duplicates */ + int dup = 0; + for (int i = 0; i < g_srv[si].autojoin_count; i++) + if (strcasecmp(g_srv[si].autojoin[i], ch) == 0) { dup=1; break; } + if (!dup) + strncpy(g_srv[si].autojoin[g_srv[si].autojoin_count++], ch, MAX_CHAN-1); } - tok=strtok(NULL,","); + tok = strtok(NULL, ","); } } @@ -1492,15 +1500,20 @@ static void build_windows(void) { /* ── event handler ─────────────────────────────────────────────────────────── */ static void do_rejoin_channels(int si) { - int any=0; - for (int i=0;i