[NeoStats-Devel] [Commits] r2767 - in trunk: include src

[email protected] Tue, 23 Aug 2005 06:52:07 +1000
Newsgroups gmane.comp.neostats.devel
Message-ID <[email protected]>
Author: Mark
Date: Tue Aug 23 04:52:02 2005
New Revision: 2767

Modified:
   trunk/include/neostats.h
   trunk/src/bans.c
Log:
Add bans list walk function

Modified: trunk/include/neostats.h
==============================================================================
--- trunk/include/neostats.h	(original)
+++ trunk/include/neostats.h	Tue Aug 23 04:52:02 2005
@@ -1497,6 +1497,9 @@
 /* List walk handler type */
 typedef int (*ModuleListHandler) ( Module *module_ptr, void *v );
 EXPORTFUNC int ProcessModuleList( ModuleListHandler handler, void *v );
+/* List walk handler type */
+typedef int (*BanListHandler) ( Ban *ban, void *v );
+EXPORTFUNC int ProcessBanList( BanListHandler handler, void *v );
 
 EXPORTFUNC hash_t *GetServerHash( void );
 

Modified: trunk/src/bans.c
==============================================================================
--- trunk/src/bans.c	(original)
+++ trunk/src/bans.c	Tue Aug 23 04:52:02 2005
@@ -39,6 +39,33 @@
  *  Bans subsystem use only. */
 static hash_t *banhash;
 
+/** @brief ProcessBanList
+ *
+ *  Calls handler for all bans
+ *
+ *  @params handler to call
+ *  @params v additional data to send to handler
+ *
+ *  @return result of handler NS_TRUE or NS_FALSE
+ */
+
+int ProcessBanList( BanListHandler handler, void *v )
+{
+	Ban *ban;
+	hscan_t ss;
+	hnode_t *bansnode;
+
+	SET_SEGV_LOCATION();
+	hash_scan_begin( &ss, banhash );
+	while( ( bansnode = hash_scan_next( &ss ) ) != NULL )
+	{
+		ban = hnode_get( bansnode );
+		if( handler( ban, v ) == NS_TRUE )
+			return NS_TRUE;
+	}
+	return NS_FALSE;
+}
+
 /** @brief new_ban
  *
  *  Create a new ban
@@ -149,6 +176,23 @@
 	ns_free( ban );
 }
 
+/** @brief ReportBan
+ *
+ *  BANS LIST helper
+ *  report ban info
+ *
+ *  @params module_ptr pointer to module to report
+ *  @params v client to send to
+ *
+ *  @return none
+ */
+
+static int ReportBan( Ban *ban, void *v )
+{
+	irc_chanalert( ns_botptr, _( "Ban: %s " ), ban->mask );
+	return NS_FALSE;
+}
+
 /** @brief ListBans
  *
  *  List all bans currently set
@@ -161,16 +205,8 @@
 
 void ListBans( void )
 {
-	Ban *ban;
-	hscan_t ss;
-	hnode_t *bansnode;
-
 	irc_chanalert( ns_botptr, _( "Ban Listing:" ) );
-	hash_scan_begin( &ss, banhash );
-	while( ( bansnode = hash_scan_next( &ss ) ) != NULL ) {
-		ban = hnode_get( bansnode );
-		irc_chanalert( ns_botptr, _( "Ban: %s " ), ban->mask );
-	}
+	ProcessBanList( ReportBan, NULL );
 	irc_chanalert( ns_botptr, _( "End of list." ) );
 }