]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/client.c
- New function Client_DestroyNow().
[ngircd-alex.git] / src / ngircd / client.c
index bea728b92ab996c1fa913fe6545f0ed01dc11d4c..bfc3a4f8af43aec4fe0390a9503ba34aecc0846e 100644 (file)
@@ -17,7 +17,7 @@
 
 #include "portab.h"
 
-static char UNUSED id[] = "$Id: client.c,v 1.72 2003/01/08 22:03:21 alex Exp $";
+static char UNUSED id[] = "$Id: client.c,v 1.73 2003/01/15 14:28:25 alex Exp $";
 
 #include "imp.h"
 #include <assert.h>
@@ -59,6 +59,10 @@ LOCAL CLIENT *New_Client_Struct PARAMS(( VOID ));
 LOCAL VOID Generate_MyToken PARAMS(( CLIENT *Client ));
 LOCAL VOID Adjust_Counters PARAMS(( CLIENT *Client ));
 
+#ifndef Client_DestroyNow
+GLOBAL VOID Client_DestroyNow PARAMS((CLIENT *Client ));
+#endif
+
 
 LONG Max_Users = 0, My_Max_Users = 0;
 
@@ -292,6 +296,35 @@ Client_Destroy( CLIENT *Client, CHAR *LogMsg, CHAR *FwdMsg, BOOLEAN SendQuit )
 } /* Client_Destroy */
 
 
+GLOBAL VOID
+Client_DestroyNow( CLIENT *Client )
+{
+       /* Destroy client structure immediately. This function is only
+        * intended for the connection layer to remove client structures
+        * of connections that can't be established! */
+
+       CLIENT *last, *c;
+
+       assert( Client != NULL );
+
+       last = NULL;
+       c = My_Clients;
+       while( c )
+       {
+               if( c == Client )
+               {
+                       /* Wir haben den Client gefunden: entfernen */
+                       if( last ) last->next = c->next;
+                       else My_Clients = (CLIENT *)c->next;
+                       free( c );
+                       break;
+               }
+               last = c;
+               c = (CLIENT *)c->next;
+       }
+} /* Client_DestroyNow */
+
+
 GLOBAL VOID
 Client_SetHostname( CLIENT *Client, CHAR *Hostname )
 {