repo: ngircd action: commit revision: path_from: revision_from: 7d6de7c352f7b91b396cbdb6f2d194e2422b35b3: path_to: revision_to:
commit 7d6de7c352f7b91b396cbdb6f2d194e2422b35b3 Author: Alexander BartonDate: 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
--- 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
--- 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
--- 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-----