commit 08d49a8fa02ef11b22d611d11c595812ce207ac8 from: Alexander Barton date: Tue Aug 06 21:18:57 2013 UTC Fix return code of some IRC_WriteXXX() functions These functions usually write to more than one target, and therefore can't return value indicating success or failure in a sane way. And, even more omportant, these functions should send to as much as possible clients and not stop at the first client which isn't reachable any more! commit - 8f5cbe51a79c786be30ebc93466988cf67a825e1 commit + 08d49a8fa02ef11b22d611d11c595812ce207ac8 blob - c5f65fe8051f9dbca27c2f26f073c731112ced08 blob + 06b88bae1db7404693df44b298a897b8c31c55cc --- src/ngircd/channel.c +++ src/ngircd/channel.c @@ -931,8 +931,9 @@ Channel_Write(CHANNEL *Chan, CLIENT *From, CLIENT *Cli if (Client_Conn(From) > NONE) Conn_UpdateIdle(Client_Conn(From)); - return IRC_WriteStrChannelPrefix(Client, Chan, From, true, - "%s %s :%s", Command, Channel_Name(Chan), Text); + IRC_WriteStrChannelPrefix(Client, Chan, From, true, "%s %s :%s", + Command, Channel_Name(Chan), Text); + return CONNECTED; } blob - ea9b9a02836a0c8f5c617c6cf6f5b2f7c2a5ff79 blob + f4d4361a73458495e0d8e0f706f1e58561775f19 --- src/ngircd/irc-write.c +++ src/ngircd/irc-write.c @@ -41,7 +41,7 @@ static const char *Get_Prefix PARAMS((CLIENT *Target, CLIENT *Client)); static void cb_writeStrServersPrefixFlag PARAMS((CLIENT *Client, CLIENT *Prefix, void *Buffer)); -static bool Send_Marked_Connections PARAMS((CLIENT *Prefix, const char *Buffer)); +static void Send_Marked_Connections PARAMS((CLIENT *Prefix, const char *Buffer)); #ifdef PROTOTYPES @@ -112,11 +112,11 @@ va_dcl #ifdef PROTOTYPES -GLOBAL bool +GLOBAL void IRC_WriteStrChannel(CLIENT *Client, CHANNEL *Chan, bool Remote, const char *Format, ...) #else -GLOBAL bool +GLOBAL void IRC_WriteStrChannel(Client, Chan, Remote, Format, va_alist) CLIENT *Client; CHANNEL *Chan; @@ -139,21 +139,21 @@ va_dcl vsnprintf( buffer, 1000, Format, ap ); va_end( ap ); - return IRC_WriteStrChannelPrefix( Client, Chan, Client_ThisServer( ), Remote, "%s", buffer ); + IRC_WriteStrChannelPrefix(Client, Chan, Client_ThisServer(), + Remote, "%s", buffer ); } /* IRC_WriteStrChannel */ - /** * send message to all clients in the same channel, but only send message * once per remote server. */ #ifdef PROTOTYPES -GLOBAL bool +GLOBAL void IRC_WriteStrChannelPrefix(CLIENT *Client, CHANNEL *Chan, CLIENT *Prefix, bool Remote, const char *Format, ...) #else -GLOBAL bool +GLOBAL void IRC_WriteStrChannelPrefix(Client, Chan, Prefix, Remote, Format, va_alist) CLIENT *Client; CHANNEL *Chan; @@ -204,7 +204,7 @@ va_dcl } cl2chan = Channel_NextMember( Chan, cl2chan ); } - return Send_Marked_Connections(Prefix, buffer); + Send_Marked_Connections(Prefix, buffer); } /* IRC_WriteStrChannelPrefix */ @@ -324,11 +324,11 @@ IRC_WriteStrServersPrefixFlag_CB(CLIENT *ExceptOf, CLI * only send message once per remote server. */ #ifdef PROTOTYPES -GLOBAL bool +GLOBAL void IRC_WriteStrRelatedPrefix(CLIENT *Client, CLIENT *Prefix, bool Remote, const char *Format, ...) #else -GLOBAL bool +GLOBAL void IRC_WriteStrRelatedPrefix(Client, Prefix, Remote, Format, va_alist) CLIENT *Client; CLIENT *Prefix; @@ -384,7 +384,7 @@ va_dcl chan_cl2chan = Channel_NextChannelOf( Client, chan_cl2chan ); } - return Send_Marked_Connections(Prefix, buffer); + Send_Marked_Connections(Prefix, buffer); } /* IRC_WriteStrRelatedPrefix */ @@ -471,11 +471,10 @@ cb_writeStrServersPrefixFlag(CLIENT *Client, CLIENT *P } /* cb_writeStrServersPrefixFlag */ -static bool +static void Send_Marked_Connections(CLIENT *Prefix, const char *Buffer) { CONN_ID conn; - bool ok = CONNECTED; assert(Prefix != NULL); assert(Buffer != NULL); @@ -483,16 +482,13 @@ Send_Marked_Connections(CLIENT *Prefix, const char *Bu conn = Conn_First(); while (conn != NONE) { if (Conn_Flag(conn) == SEND_TO_SERVER) - ok = Conn_WriteStr(conn, ":%s %s", - Client_ID(Prefix), Buffer); + Conn_WriteStr(conn, ":%s %s", + Client_ID(Prefix), Buffer); else if (Conn_Flag(conn) == SEND_TO_USER) - ok = Conn_WriteStr(conn, ":%s %s", - Client_MaskCloaked(Prefix), Buffer); - if (!ok) - break; + Conn_WriteStr(conn, ":%s %s", + Client_MaskCloaked(Prefix), Buffer); conn = Conn_Next( conn ); } - return ok; } blob - dc8dec209157a64c9ad6cdcf625291ec17fbaca9 blob + ddfe2f0e1d5e172a543269051e91decd38873257 --- src/ngircd/irc-write.h +++ src/ngircd/irc-write.h @@ -1,6 +1,6 @@ /* * ngIRCd -- The Next Generation IRC Daemon - * Copyright (c)2001-2008 Alexander Barton (alex@barton.de) + * Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,9 +21,9 @@ GLOBAL bool IRC_WriteStrClient PARAMS((CLIENT *Client, GLOBAL bool IRC_WriteStrClientPrefix PARAMS((CLIENT *Client, CLIENT *Prefix, const char *Format, ...)); -GLOBAL bool IRC_WriteStrChannel PARAMS((CLIENT *Client, CHANNEL *Chan, +GLOBAL void IRC_WriteStrChannel PARAMS((CLIENT *Client, CHANNEL *Chan, bool Remote, const char *Format, ...)); -GLOBAL bool IRC_WriteStrChannelPrefix PARAMS((CLIENT *Client, CHANNEL *Chan, +GLOBAL void IRC_WriteStrChannelPrefix PARAMS((CLIENT *Client, CHANNEL *Chan, CLIENT *Prefix, bool Remote, const char *Format, ...)); GLOBAL void IRC_WriteStrServers PARAMS((CLIENT *ExceptOf, @@ -36,7 +36,7 @@ GLOBAL void IRC_WriteStrServersPrefixFlag_CB PARAMS((C CLIENT *Prefix, char Flag, void (*callback)(CLIENT *, CLIENT *, void *), void *cb_data)); -GLOBAL bool IRC_WriteStrRelatedPrefix PARAMS((CLIENT *Client, CLIENT *Prefix, +GLOBAL void IRC_WriteStrRelatedPrefix PARAMS((CLIENT *Client, CLIENT *Prefix, bool Remote, const char *Format, ...)); GLOBAL void IRC_SendWallops PARAMS((CLIENT *Client, CLIENT *From,