# HG changeset patch # User Ethan Blanton # Date 1061322418 0 # Node ID 5ca59294698dd99c21d174e22475bb9fbbe87de4 # Parent 6467b992baac64545f93fc1c12199faca24b160a [gaim-migrate @ 7021] Fixes signal passing. Arguments in C are pushed in reverse order, so multiple calls to va_arg() in an argument list produce backwards arguments. committer: Tailor Script diff -r 6467b992baac -r 5ca59294698d src/signals.c --- a/src/signals.c Tue Aug 19 11:00:12 2003 +0000 +++ b/src/signals.c Tue Aug 19 19:46:58 2003 +0000 @@ -441,36 +441,41 @@ gaim_marshal_VOID__POINTER(GaimCallback cb, va_list args, void *data, void **return_val) { - ((void (*)(void *, void *))cb)(va_arg(args, void *), data); + void *arg1 = va_arg(args, void *); + + ((void (*)(void *, void *))cb)(arg1, data); } void gaim_marshal_VOID__POINTER_POINTER(GaimCallback cb, va_list args, void *data, void **return_val) { - ((void (*)(void *, void *, void *))cb)(va_arg(args, void *), - va_arg(args, void *), - data); + void *arg1 = va_arg(args, void *); + void *arg2 = va_arg(args, void *); + + ((void (*)(void *, void *, void *))cb)(arg1, arg2, data); } void gaim_marshal_VOID__POINTER_POINTER_UINT(GaimCallback cb, va_list args, void *data, void **return_val) { - ((void (*)(void *, void *, guint, void *))cb)(va_arg(args, void *), - va_arg(args, void *), - va_arg(args, guint), - data); + void *arg1 = va_arg(args, void *); + void *arg2 = va_arg(args, void *); + guint arg3 = va_arg(args, guint); + + ((void (*)(void *, void *, guint, void *))cb)(arg1, arg2, arg3, data); } void gaim_marshal_VOID__POINTER_POINTER_POINTER(GaimCallback cb, va_list args, void *data, void **return_val) { - ((void (*)(void *, void *, void *, void *))cb)(va_arg(args, void *), - va_arg(args, void *), - va_arg(args, void *), - data); + void *arg1 = va_arg(args, void *); + void *arg2 = va_arg(args, void *); + void *arg3 = va_arg(args, void *); + + ((void (*)(void *, void *, void *, void *))cb)(arg1, arg2, arg3, data); } void @@ -479,9 +484,12 @@ void *data, void **return_val) { - ((void (*)(void *, void *, void *, void *, void *))cb)( - va_arg(args, void *), va_arg(args, void *), - va_arg(args, void *), va_arg(args, void *), data); + void *arg1 = va_arg(args, void *); + void *arg2 = va_arg(args, void *); + void *arg3 = va_arg(args, void *); + void *arg4 = va_arg(args, void *); + + ((void (*)(void *, void *, void *, void *, void *))cb)(arg1, arg2, arg3, arg4, data); } void gaim_marshal_VOID__POINTER_POINTER_POINTER_UINT_UINT(GaimCallback cb, @@ -489,10 +497,14 @@ void *data, void **return_val) { + void *arg1 = va_arg(args, void *); + void *arg2 = va_arg(args, void *); + void *arg3 = va_arg(args, void *); + guint arg4 = va_arg(args, guint); + guint arg5 = va_arg(args, guint); + ((void (*)(void *, void *, void *, guint, guint, void *))cb)( - va_arg(args, void *), va_arg(args, void *), - va_arg(args, void *), va_arg(args, guint), - va_arg(args, guint), data); + arg1, arg2, arg3, arg4, arg5, data); } void @@ -500,8 +512,9 @@ void **return_val) { gboolean ret_val; + void *arg1 = va_arg(args, void *); - ret_val = ((gboolean (*)(void *, void *))cb)(va_arg(args, void *), data); + ret_val = ((gboolean (*)(void *, void *))cb)(arg1, data); if (return_val != NULL) *return_val = GINT_TO_POINTER(ret_val); @@ -512,10 +525,10 @@ void *data, void **return_val) { gboolean ret_val; + void *arg1 = va_arg(args, void *); + void *arg2 = va_arg(args, void *); - ret_val = ((gboolean (*)(void *, void *, void *))cb)(va_arg(args, void *), - va_arg(args, void *), - data); + ret_val = ((gboolean (*)(void *, void *, void *))cb)(arg1, arg2, data); if (return_val != NULL) *return_val = GINT_TO_POINTER(ret_val); @@ -528,11 +541,13 @@ void **return_val) { gboolean ret_val; + void *arg1 = va_arg(args, void *); + void *arg2 = va_arg(args, void *); + void *arg3 = va_arg(args, void *); + guint arg4 = va_arg(args, guint); ret_val = ((gboolean (*)(void *, void *, void *, guint, void *))cb)( - va_arg(args, void *), va_arg(args, void *), - va_arg(args, void *), va_arg(args, guint), - data); + arg1, arg2, arg3, arg4, data); if (return_val != NULL) *return_val = GINT_TO_POINTER(ret_val); @@ -545,11 +560,13 @@ void **return_val) { gboolean ret_val; + void *arg1 = va_arg(args, void *); + void *arg2 = va_arg(args, void *); + void *arg3 = va_arg(args, void *); + void *arg4 = va_arg(args, void *); ret_val = ((gboolean (*)(void *, void *, void *, void *, void *))cb)( - va_arg(args, void *), va_arg(args, void *), - va_arg(args, void *), va_arg(args, void *), - data); + arg1, arg2, arg3, arg4, data); if (return_val != NULL) *return_val = GINT_TO_POINTER(ret_val); @@ -560,12 +577,15 @@ GaimCallback cb, va_list args, void *data, void **return_val) { gboolean ret_val; + void *arg1 = va_arg(args, void *); + void *arg2 = va_arg(args, void *); + void *arg3 = va_arg(args, void *); + void *arg4 = va_arg(args, void *); + void *arg5 = va_arg(args, void *); ret_val = ((gboolean (*)(void *, void *, void *, void *, void *, void *))cb)( - va_arg(args, void *), va_arg(args, void *), - va_arg(args, void *), va_arg(args, void *), - va_arg(args, void *), data); + arg1, arg2, arg3, arg4, arg5, data); if (return_val != NULL) *return_val = GINT_TO_POINTER(ret_val);