commit f62c73d5a605f871ebd39a5442dee976f67c9acd
parent 6c561ad3bddae876620cdd627d7312e918929023
Author: emmett1 <me@emmett1.my>
Date: Mon, 30 Mar 2026 23:05:55 +0800
updated
Diffstat:
2 files changed, 20 insertions(+), 12 deletions(-)
diff --git a/readme.txt b/readme.txt
@@ -110,7 +110,7 @@ Examples:
CONFIG FILE
-----------
-Loaded from ~/.ircrc or ~/.config/irc/ircrc (first found wins).
+Loaded from ~/.sirc or ~/.config/sirc/config (first found wins).
CLI flags override the first server in the config.
Use [server] blocks for multiple servers. Each block is an independent
diff --git a/sirc.c b/sirc.c
@@ -3,7 +3,7 @@
*
* Usage: sirc [options]
*
- * Config (~/.sircrc):
+ * Config (~/.sirc):
* # Default server (applied when no [server] block precedes it)
* nick = mynick
* ignore = badbot,spammer
@@ -584,7 +584,7 @@ static void handle_irc_line(int si, const char *raw) {
} else if (strcmp(sub,"NAK")==0) {
ev_simple(EV_ERROR, si, NULL, NULL, "Server rejected SASL CAP.");
srv_sendf(si, "NICK %s", s->nick);
- srv_sendf(si, "USER %s 0 * :circ", s->nick);
+ srv_sendf(si, "USER %s 0 * :sirc", s->nick);
}
return;
}
@@ -600,7 +600,7 @@ static void handle_irc_line(int si, const char *raw) {
ev_simple(EV_STATUS, si, NULL, NULL, "SASL authentication successful.");
srv_send_raw(si, "CAP END");
srv_sendf(si, "NICK %s", s->nick);
- srv_sendf(si, "USER %s 0 * :circ", s->nick);
+ srv_sendf(si, "USER %s 0 * :sirc", s->nick);
return;
}
if (strcmp(m.cmd,"902")==0||strcmp(m.cmd,"904")==0||
@@ -610,7 +610,7 @@ static void handle_irc_line(int si, const char *raw) {
ev_simple(EV_ERROR, si, NULL, NULL, buf);
srv_send_raw(si, "CAP END");
srv_sendf(si, "NICK %s", s->nick);
- srv_sendf(si, "USER %s 0 * :circ", s->nick);
+ srv_sendf(si, "USER %s 0 * :sirc", s->nick);
return;
}
@@ -943,7 +943,7 @@ static void *net_thread(void *arg) {
srv_send_raw(si,"CAP REQ :sasl");
else {
srv_sendf(si,"NICK %s",s->nick);
- srv_sendf(si,"USER %s 0 * :circ",s->nick);
+ srv_sendf(si,"USER %s 0 * :sirc",s->nick);
}
char readbuf[8192], linebuf[MAX_LINE*4];
@@ -1056,8 +1056,8 @@ static void load_config(const char *path) {
char candidates[2][MAX_HOST];
const char *home=getenv("HOME");
if (home) {
- snprintf(candidates[0],MAX_HOST,"%s/.ircrc",home);
- snprintf(candidates[1],MAX_HOST,"%s/.config/irc/ircrc",home);
+ snprintf(candidates[0],MAX_HOST,"%s/.sirc",home);
+ snprintf(candidates[1],MAX_HOST,"%s/.config/sirc/config",home);
}
FILE *f=NULL;
if (path) f=fopen(path,"r");
@@ -1965,7 +1965,7 @@ static void usage(const char *prog) {
" --sasl-pass PASS SASL password\n"
" --config FILE config file\n"
"\n"
- "Multiple servers via ~/.ircrc [server] blocks.\n", prog);
+ "Multiple servers via ~/.sirc [server] blocks.\n", prog);
}
int main(int argc, char **argv) {
@@ -1994,19 +1994,27 @@ int main(int argc, char **argv) {
if (cli_host) {
int si;
if (g_srv_count==0) si=srv_alloc();
- else si=0; /* override first */
+ else si=0;
strncpy(g_srv[si].host,cli_host,MAX_HOST-1);
if(cli_port>0) g_srv[si].port=cli_port;
- if(cli_nick) strncpy(g_srv[si].nick,cli_nick,MAX_NICK-1);
if(cli_tls>=0) g_srv[si].use_tls=cli_tls;
+ if(cli_chan) srv_add_autojoin(si,cli_chan);
if(cli_su) strncpy(g_srv[si].sasl_user,cli_su,MAX_NICK-1);
if(cli_sp) strncpy(g_srv[si].sasl_pass,cli_sp,255);
- if(cli_chan) srv_add_autojoin(si,cli_chan);
+ if(cli_nick) strncpy(g_srv[si].nick,cli_nick,MAX_NICK-1);
} else if (g_srv_count==0) {
/* no config, no --host: add default server */
srv_alloc();
}
+ /* apply --nick / --channel / --tls to all servers that don't have
+ their own value set (covers the no-host case) */
+ for (int i=0; i<g_srv_count; i++) {
+ if (cli_nick && !cli_host) strncpy(g_srv[i].nick, cli_nick, MAX_NICK-1);
+ if (cli_tls>=0 && !cli_host) g_srv[i].use_tls = cli_tls;
+ if (cli_chan && !cli_host) srv_add_autojoin(i, cli_chan);
+ }
+
/* create status channels */
for(int i=0;i<g_srv_count;i++) chan_add(i,"*status*");