[svn-commits] mmichelson: branch group/CCSS r226238 - /team/group/CCSS/main/ccss.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Tue Oct 27 17:20:05 CDT 2009


Author: mmichelson
Date: Tue Oct 27 17:20:00 2009
New Revision: 226238

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=226238
Log:
Use different syntax for state_change_funcs to ensure
proper placement of function pointers in the array.

Thanks again to Richard for the idea.


Modified:
    team/group/CCSS/main/ccss.c

Modified: team/group/CCSS/main/ccss.c
URL: http://svnview.digium.com/svn/asterisk/team/group/CCSS/main/ccss.c?view=diff&rev=226238&r1=226237&r2=226238
==============================================================================
--- team/group/CCSS/main/ccss.c (original)
+++ team/group/CCSS/main/ccss.c Tue Oct 27 17:20:00 2009
@@ -2503,24 +2503,16 @@
 	return 0;
 }
 
-/* The order of items in this table
- * is very important and must correspond
- * to the order of the states in the
- * cc_state enum.
- */
-static struct cc_function_table {
-	enum cc_state state;
-	int (*func)(struct cc_core_instance *, struct cc_state_change_args *, enum cc_state previous_state);
-} state_change_funcs[] = {
-	{CC_AVAILABLE, cc_available},
-	{CC_CALLER_OFFERED, cc_caller_offered},
-	{CC_CALLER_REQUESTED, cc_caller_requested},
-	{CC_ACTIVE, cc_active},
-	{CC_CALLEE_READY, cc_callee_ready},
-	{CC_CALLER_BUSY, cc_caller_busy},
-	{CC_RECALLING, cc_recalling},
-	{CC_COMPLETE, cc_complete},
-	{CC_FAILED, cc_failed},
+int (*state_change_funcs [])(struct cc_core_instance *, struct cc_state_change_args *, enum cc_state previous_state) = {
+	[CC_AVAILABLE] = cc_available,
+	[CC_CALLER_OFFERED] = cc_caller_offered,
+	[CC_CALLER_REQUESTED] = cc_caller_requested,
+	[CC_ACTIVE] = cc_active,
+	[CC_CALLEE_READY] = cc_callee_ready,
+	[CC_CALLER_BUSY] = cc_caller_busy,
+	[CC_RECALLING] = cc_recalling,
+	[CC_COMPLETE] = cc_complete,
+	[CC_FAILED] = cc_failed,
 };
 
 static int cc_do_state_change(void *datap)
@@ -2548,7 +2540,7 @@
 		return -1;
 	}
 
-	res = state_change_funcs[core_instance->current_state].func(core_instance, args, previous_state);
+	res = state_change_funcs[core_instance->current_state](core_instance, args, previous_state);
 
 	ast_free(args);
 	cc_unref(core_instance, "Unref since state change has completed"); /* From ao2_find */




More information about the svn-commits mailing list