From 76e761ad2019ffa8f86d41afc848f271bea4d1e0 Mon Sep 17 00:00:00 2001
From: Christian Persch <chpe@cvs.gnome.org>
Date: Wed, 2 Jul 2003 22:12:33 +0000
Subject: Don't try to assign va_list to a gpointer var. Fixes bug #116131.

2003-07-03  Christian Persch  <chpe@cvs.gnome.org>

	* lib/ephy-node.c: (callback), (ephy_node_emit_signal):

	Don't try to assign va_list to a gpointer var. Fixes bug #116131.
---
 lib/ephy-node.c | 31 +++++++++++++++++++------------
 1 file changed, 19 insertions(+), 12 deletions(-)

(limited to 'lib/ephy-node.c')

diff --git a/lib/ephy-node.c b/lib/ephy-node.c
index ed2b20e7b..b9bce2d33 100644
--- a/lib/ephy-node.c
+++ b/lib/ephy-node.c
@@ -64,6 +64,12 @@ struct EphyNode
 	EphyNodeDb *db;
 };
 
+typedef struct
+{
+	EphyNodeSignalType type;
+	va_list valist;
+} ENESCData;
+
 /* evillish hacks to temporarily readlock->writelock and v.v. */
 static inline void
 write_lock_to_read_lock (EphyNode *node)
@@ -113,14 +119,16 @@ int_hash (gconstpointer a)
 }
 
 static void
-callback (long id, EphyNodeSignalData *data, gpointer *user_data)
+callback (long id, EphyNodeSignalData *data, gpointer *dummy)
 {
-        va_list valist;
-	EphyNodeSignalType type = GPOINTER_TO_INT (user_data[1]);
+	ENESCData *user_data;
+	va_list valist;
+
+	user_data = (ENESCData *) dummy;
 
-	if (data->type != type) return;
+	valist = user_data->valist;
 
-        va_copy(valist, user_data[0]);
+	if (data->type != user_data->type) return;
 
 	switch (data->type)
 	{
@@ -155,18 +163,17 @@ callback (long id, EphyNodeSignalData *data, gpointer *user_data)
 static void
 ephy_node_emit_signal (EphyNode *node, EphyNodeSignalType type, ...)
 {
-	va_list valist;
-	gpointer data[2];
+	ENESCData data;
+
+	va_start (data.valist, type);
 
-	va_start (valist, type);
+	data.type = type;
 
-	data[0] = (gpointer)valist;
-	data[1] = GINT_TO_POINTER (type);
 	g_hash_table_foreach (node->signals,
 			      (GHFunc) callback,
-			      data);
+			      &data);
 
-	va_end (valist);
+	va_end (data.valist);
 }
 
 static void
-- 
cgit