summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAlexander Barton <alex@barton.de>2023-09-17 19:38:53 +0200
committerAlexander Barton <alex@barton.de>2023-09-17 19:56:07 +0200
commit30ba325ddedb573cfef70e318db1d294c9703b5d (patch)
treec39d8c148aa056d81f8fa6c3feb725143ddfd586 /src
parentcfd7d4288ebf55e6b65f33900a9ffac63a6ac6e2 (diff)
downloadngircd-30ba325ddedb573cfef70e318db1d294c9703b5d.tar.gz
ngircd-30ba325ddedb573cfef70e318db1d294c9703b5d.zip
Various fixes and enhancements for the "Autojoin" patch
- Bring sample-ngircd.conf and ngircd.conf.5 description in line.
- Fix configuration parsing, it always showed the 'Unknown variable
  "Autojoin"' error message, even when everything was perfectly fine.
- And fix a build error (at least on macOS with Apple Clang 14):
    login.c:234:3: error: call to undeclared function 'IRC_JOIN'; ISO
    C99 and later do not support implicit function declarations
    [-Wimplicit-function-declaration]
       IRC_JOIN(Client, &Req);
       ^
  The #include for the "irc.channel.h" header was missing!
- Remove a unused variable that caused a compiler warning:
    login.c:222:12: warning: unused variable 'n' [-Wunused-variable]
       size_t i, n, channel_count = array_length(&Conf_Channels, sizeof(*conf_chan));
                 ^
- Add a explicit cast to fix a compiler warning:
    login.c:235:15: warning: assigning to 'char *' from 'const char[51]'
    discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers]
       Req.argv[0] = conf_chan->name;
                   ^ ~~~~~~~~~~~~~~~
Diffstat (limited to 'src')
-rw-r--r--src/ngircd/conf.c4
-rw-r--r--src/ngircd/login.c14
2 files changed, 11 insertions, 7 deletions
diff --git a/src/ngircd/conf.c b/src/ngircd/conf.c
index 5ee552e6..120db216 100644
--- a/src/ngircd/conf.c
+++ b/src/ngircd/conf.c
@@ -2000,9 +2000,11 @@ Handle_CHANNEL(const char *File, int Line, char *Var, char *Arg)
 			Config_Error_TooLong(File, Line, Var);
 		return;
 	}
-	if( strcasecmp( Var, "Autojoin" ) == 0 )
+	if( strcasecmp( Var, "Autojoin" ) == 0 ) {
 		/* Check autojoin */
 		chan->autojoin = Check_ArgIsTrue(Arg);
+		return;
+	}
 	if( strcasecmp( Var, "Key" ) == 0 ) {
 		/* Initial Channel Key (mode k) */
 		len = strlcpy(chan->key, Arg, sizeof(chan->key));
diff --git a/src/ngircd/login.c b/src/ngircd/login.c
index 0dd0bd89..3412e337 100644
--- a/src/ngircd/login.c
+++ b/src/ngircd/login.c
@@ -31,6 +31,7 @@
 #include "log.h"
 #include "messages.h"
 #include "ngircd.h"
+#include "irc-channel.h"
 #include "irc-info.h"
 #include "irc-mode.h"
 #include "irc-write.h"
@@ -201,24 +202,25 @@ Login_User_PostAuth(CLIENT *Client)
 	} else
 		IRC_SetPenalty(Client, 1);
 
-  /* Autojoin clients to the channels */
-  Login_Autojoin(Client);
+	/* Autojoin clients to the channels */
+	Login_Autojoin(Client);
 
 	return CONNECTED;
 }
 
 /**
  * Autojoin clients to the channels set by administrator
- * If autojoin is not set in Config or the channel is not available for search - do nothing
  *
+ * Do nothing if autojoin is not set in the configuration or the channel is not
+ * available (any more).
  **/
 GLOBAL void
 Login_Autojoin(CLIENT *Client)
 {
-	/** make an autojoin to each channel that is good for it **/
 	REQUEST Req;
 	const struct Conf_Channel *conf_chan;
-	size_t i, n, channel_count = array_length(&Conf_Channels, sizeof(*conf_chan));
+	size_t i, channel_count = array_length(&Conf_Channels, sizeof(*conf_chan));
+
 	conf_chan = array_start(&Conf_Channels);
 	assert(channel_count == 0 || conf_chan != NULL);
 
@@ -230,7 +232,7 @@ Login_Autojoin(CLIENT *Client)
 		Req.prefix = Client_ID(Client_ThisServer());
 		Req.command = "JOIN";
 		Req.argc = 1;
-		Req.argv[0] = conf_chan->name;
+		Req.argv[0] = (char *)conf_chan->name;
 		IRC_JOIN(Client, &Req);
 	}
 }