Module: ngircd.git Branch: master Commit: 7d6de7c352f7b91b396cbdb6f2d194e2422b35b3 URL: http://ngircd.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git&a=commit;h=7d6de...
Author: Alexander Barton alex@barton.de Date: Tue Jul 22 16:54:12 2008 +0200
IRC_SendWallops(): support format string and variable parameter lists.
---
src/ngircd/irc-oper.c | 17 +++++++---------- src/ngircd/irc-write.c | 25 ++++++++++++++++++++++--- src/ngircd/irc-write.h | 2 +- 3 files changed, 30 insertions(+), 14 deletions(-)
diff --git a/src/ngircd/irc-oper.c b/src/ngircd/irc-oper.c index 0824149..544fe67 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 dae78e5..9b5b5e2 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 5bac0de..a984997 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));