Mercurial > pidgin
changeset 6505:5ca59294698d
[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 <tailor@pidgin.im>
author | Ethan Blanton <elb@pidgin.im> |
---|---|
date | Tue, 19 Aug 2003 19:46:58 +0000 |
parents | 6467b992baac |
children | b6f7fcafc908 |
files | src/signals.c |
diffstat | 1 files changed, 51 insertions(+), 31 deletions(-) [+] |
line wrap: on
line diff
--- 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);