repo: ngircd
action: commit
revision: 
path_from: 
revision_from: 7d6de7c352f7b91b396cbdb6f2d194e2422b35b3:
path_to: 
revision_to: 
git.thebackupbox.net
ngircd
git clone git://git.thebackupbox.net/ngircd
commit 7d6de7c352f7b91b396cbdb6f2d194e2422b35b3
Author: Alexander Barton 
Date:   Tue Jul 22 16:54:12 2008 +0200

    IRC_SendWallops(): support format string and variable parameter lists.

diff --git a/src/ngircd/irc-oper.c b/src/ngircd/irc-oper.c
index 082414984df728ada9fdfae2aae7d6d5bb33c5ef..
index ..544fe67d4928c8ba3dc793f38107b6f62b8a5835 100644
--- a/src/ngircd/irc-oper.c
+++ b/src/ngircd/irc-oper.c
@@ -207,8 +207,6 @@ IRC_RESTART( CLIENT *Client, REQUEST *Req )
 GLOBAL bool
 IRC_CONNECT(CLIENT * Client, REQUEST * Req)
 {
-	char msg[LINE_LEN + 64];
-
 	assert(Client != NULL);
 	assert(Req != NULL);

@@ -225,9 +223,9 @@ IRC_CONNECT(CLIENT * Client, REQUEST * Req)
 		return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
 					  Client_ID(Client), Req->command);

-	snprintf(msg, sizeof(msg), "Received CONNECT %s from %s",
-		 Req->argv[0], Client_ID(Client));
-	IRC_SendWallops(Client_ThisServer(), Client_ThisServer(), msg);
+	IRC_SendWallops(Client_ThisServer(), Client_ThisServer(),
+			"Received CONNECT %s from %s",
+			Req->argv[0], Client_ID(Client));

 	Log(LOG_NOTICE | LOG_snotice,
 	    "Got CONNECT command from \"%s\" for \"%s\".", Client_Mask(Client),
@@ -269,7 +267,6 @@ GLOBAL bool
 IRC_DISCONNECT(CLIENT * Client, REQUEST * Req)
 {
 	CONN_ID my_conn;
-	char msg[LINE_LEN + 64];

 	assert(Client != NULL);
 	assert(Req != NULL);
@@ -282,9 +279,9 @@ IRC_DISCONNECT(CLIENT * Client, REQUEST * Req)
 		return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
 					  Client_ID(Client), Req->command);

-	snprintf(msg, sizeof(msg), "Received DISCONNECT %s from %s",
-		 Req->argv[0], Client_ID(Client));
-	IRC_SendWallops(Client_ThisServer(), Client_ThisServer(), msg);
+	IRC_SendWallops(Client_ThisServer(), Client_ThisServer(),
+			"Received DISCONNECT %s from %s",
+			Req->argv[0], Client_ID(Client));

 	Log(LOG_NOTICE | LOG_snotice,
 	    "Got DISCONNECT command from \"%s\" for \"%s\".",
@@ -333,7 +330,7 @@ IRC_WALLOPS( CLIENT *Client, REQUEST *Req )
 	if (!from)
 		return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG, Client_ID(Client), Req->prefix);

-	IRC_SendWallops(Client, from, Req->argv[0]);
+	IRC_SendWallops(Client, from, "%s", Req->argv[0]);
 	return CONNECTED;
 } /* IRC_WALLOPS */

diff --git a/src/ngircd/irc-write.c b/src/ngircd/irc-write.c
index dae78e582335fd6ab817b1d7f75da1a773706f72..
index ..9b5b5e2185aa2e8a9b1577e5d5b5fa2ee3359bd4 100644
--- a/src/ngircd/irc-write.c
+++ b/src/ngircd/irc-write.c
@@ -408,11 +408,30 @@ va_dcl
 /**
  * Send WALLOPS message.
  */
+#ifdef PROTOTYPES
+GLOBAL void
+IRC_SendWallops(CLIENT *Client, CLIENT *From, const char *Format, ...)
+#else
 GLOBAL void
-IRC_SendWallops(CLIENT *Client, CLIENT *From, const char *Message)
+IRC_SendWallops(Client, From, Format, va_alist )
+CLIENT *Client;
+CLIENT *From;
+char *Format;
+va_dcl
+#endif
 {
+	va_list ap;
+	char msg[1000];
 	CLIENT *to;

+#ifdef PROTOTYPES
+	va_start(ap, Format);
+#else
+	va_start(ap);
+#endif
+	vsnprintf(msg, 1000, Format, ap);
+	va_end(ap);
+
 	for (to=Client_First(); to != NULL; to=Client_Next(to)) {
 		if (Client_Conn(to) == NONE) /* no local connection */
 			continue;
@@ -421,12 +440,12 @@ IRC_SendWallops(CLIENT *Client, CLIENT *From, const char *Message)
 		case CLIENT_USER:
 			if (Client_HasMode(to, 'w'))
 				IRC_WriteStrClientPrefix(to, From,
-							 "WALLOPS :%s", Message);
+							 "WALLOPS :%s", msg);
 				break;
 		case CLIENT_SERVER:
 			if (to != Client)
 				IRC_WriteStrClientPrefix(to, From,
-							 "WALLOPS :%s", Message);
+							 "WALLOPS :%s", msg);
 				break;
 		}
 	}
diff --git a/src/ngircd/irc-write.h b/src/ngircd/irc-write.h
index 5bac0de7a9960f8351f2c3cc5101bfdd8103023a..
index ..a984997b3c6c3acab14ad322bf71fbdb95ab0805 100644
--- a/src/ngircd/irc-write.h
+++ b/src/ngircd/irc-write.h
@@ -36,7 +36,7 @@ GLOBAL bool IRC_WriteStrRelatedPrefix PARAMS((CLIENT *Client, CLIENT *Prefix,
 		bool Remote, char *Format, ...));

 GLOBAL void IRC_SendWallops PARAMS((CLIENT *Client, CLIENT *From,
-		const char *Message));
+		const char *Format, ...));

 GLOBAL void IRC_SetPenalty PARAMS((CLIENT *Client, time_t Seconds));

-----END OF PAGE-----