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);