]> arthur.barton.de Git - ngircd.git/blobdiff - src/ngircd/irc-mode.c
Channel_Mode: check return type of Invite/Ban Add/Del function
[ngircd.git] / src / ngircd / irc-mode.c
index 675164d652600d811e55a0876d42c7b317f1316d..9b2b53d0845b90a83faf272b1baf1a52c5c71e6f 100644 (file)
@@ -14,8 +14,6 @@
 
 #include "portab.h"
 
-static char UNUSED id[] = "$Id: irc-mode.c,v 1.52 2008/02/24 18:44:41 fw Exp $";
-
 #include "imp.h"
 #include <assert.h>
 #include <stdio.h>
@@ -41,10 +39,8 @@ static char UNUSED id[] = "$Id: irc-mode.c,v 1.52 2008/02/24 18:44:41 fw Exp $";
 static bool Client_Mode PARAMS(( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target ));
 static bool Channel_Mode PARAMS(( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel ));
 
-static bool Add_Ban_Invite PARAMS((int what, CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel, char *Pattern ));
-
-static bool Del_Invite PARAMS(( CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel, char *Pattern ));
-static bool Del_Ban PARAMS(( CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel, char *Pattern ));
+static bool Add_Ban_Invite PARAMS((int what, CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel, const char *Pattern));
+static bool Del_Ban_Invite PARAMS((int what, CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel, const char *Pattern));
 
 static bool Send_ListChange PARAMS(( char *Mode, CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel, const char *Mask ));
 
@@ -485,39 +481,26 @@ Channel_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel )
                                break;
 
                        /* --- Channel lists --- */
-
                        case 'I': /* Invite lists */
-                               if( arg_arg > mode_arg )
-                               {
-                                       /* modify list */
-                                       if( modeok )
-                                       {
-                                               if( set ) Add_Ban_Invite(*mode_ptr, Origin, Client, Channel, Req->argv[arg_arg] );
-                                               else Del_Invite( Origin, Client, Channel, Req->argv[arg_arg] );
-                                       }
-                                       else ok = IRC_WriteStrClient( Origin, ERR_CHANOPRIVSNEEDED_MSG, Client_ID( Origin ), Channel_Name( Channel ));
-                                       Req->argv[arg_arg][0] = '\0';
-                                       arg_arg++;
-                               }
-                               else Channel_ShowInvites( Origin, Channel );
-                               break;
-
                        case 'b': /* Ban lists */
-                               if( arg_arg > mode_arg )
-                               {
+                               if (arg_arg > mode_arg) {
                                        /* modify list */
-                                       if( modeok )
-                                       {
-                                               if( set ) Add_Ban_Invite(*mode_ptr, Origin, Client, Channel, Req->argv[arg_arg] );
-                                               else Del_Ban( Origin, Client, Channel, Req->argv[arg_arg] );
+                                       if (modeok) {
+                                               ok = set ? Add_Ban_Invite(*mode_ptr, Origin, Client, Channel, Req->argv[arg_arg])
+                                                        : Del_Ban_Invite(*mode_ptr, Origin, Client, Channel, Req->argv[arg_arg]);
+                                       } else {
+                                               ok = IRC_WriteStrClient(Origin, ERR_CHANOPRIVSNEEDED_MSG,
+                                                               Client_ID(Origin), Channel_Name(Channel));
                                        }
-                                       else ok = IRC_WriteStrClient( Origin, ERR_CHANOPRIVSNEEDED_MSG, Client_ID( Origin ), Channel_Name( Channel ));
                                        Req->argv[arg_arg][0] = '\0';
                                        arg_arg++;
+                               } else {
+                                       if (*mode_ptr == 'I')
+                                               Channel_ShowInvites(Origin, Channel);
+                                       else
+                                               Channel_ShowBans(Origin, Channel);
                                }
-                               else Channel_ShowBans( Origin, Channel );
                                break;
-
                        default:
                                Log( LOG_DEBUG, "Unknown mode \"%c%c\" from \"%s\" on %s!?", set ? '+' : '-', *mode_ptr, Client_ID( Origin ), Channel_Name( Channel ));
                                if( Client_Type( Client ) != CLIENT_SERVER ) ok = IRC_WriteStrClient( Origin, ERR_UMODEUNKNOWNFLAG2_MSG, Client_ID( Origin ), set ? '+' : '-', *mode_ptr );
@@ -648,7 +631,7 @@ IRC_AWAY( CLIENT *Client, REQUEST *Req )
 
 
 static bool
-Add_Ban_Invite(int what, CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel, char *Pattern )
+Add_Ban_Invite(int what, CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel, const char *Pattern)
 {
        const char *mask;
        bool already;
@@ -680,33 +663,28 @@ Add_Ban_Invite(int what, CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel, char
 
 
 static bool
-Del_Invite( CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel, char *Pattern )
+Del_Ban_Invite(int what, CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel, const char *Pattern)
 {
-       char *mask;
+       const char *mask;
+       struct list_head *list;
 
        assert( Client != NULL );
        assert( Channel != NULL );
        assert( Pattern != NULL );
+       assert(what == 'I' || what == 'b');
 
        mask = Lists_MakeMask( Pattern );
-       Lists_Del(Channel_GetListInvites(Channel), mask);
-       return Send_ListChange( "-I", Prefix, Client, Channel, mask );
-} /* Del_Invite */
-
-
-static bool
-Del_Ban( CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel, char *Pattern )
-{
-       char *mask;
 
-       assert( Client != NULL );
-       assert( Channel != NULL );
-       assert( Pattern != NULL );
+       if (what == 'I')
+               list = Channel_GetListInvites(Channel);
+       else
+               list = Channel_GetListBans(Channel);
 
-       mask = Lists_MakeMask( Pattern );
-       Lists_Del(Channel_GetListBans(Channel), mask);
+       Lists_Del(list, mask);
+       if (what == 'I')
+               return Send_ListChange( "-I", Prefix, Client, Channel, mask );
        return Send_ListChange( "-b", Prefix, Client, Channel, mask );
-} /* Del_Ban */
+}
 
 
 static bool