Ethereal-dev: [Ethereal-dev] RFC: Some patches for 64-bit architectures

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: Joerg Mayer <jmayer@xxxxxxxxx>
Date: Thu, 10 Oct 2002 02:33:55 +0200
or why you shouldn't treat pointers as integers and vice versa.

I've looked into the source rpm of the suse 8.1 ethereal-0.9.6
package and found one patch. The only thing that patch does is
cast around some conversions between pointers and integers.
As I didn't like that solution (I don't know whether this even
compiles on 32bit archs) I created a solution that is more to
my liking. There's basically 3 places where that needed to be
done:

1) gtk/  I like my solution, maybe I should add a (gpointer)
   before the & ?
2) packet-dcerpc.c and packet-rpc: I don't like just adding up
   integers and pointers in order to calculate a key, but I'm
   not sure that my solution of just removing the pointer from
   the sum is all that good either
3) packet-ssl.c: Not yet patched. That's a variable that is used
   as pointer or as a version (integer), depending on context.
   Adding a new struct member would be cleaner or, if it's that
   memory critical, maybe changing the pointer into a union
   might be a solution.s

I've attached the original suse patch and my first attempt at a
patch. Please give me feedback what you think about the problem
and better solutions (or whether the patch works - I only checked
that it compiles!)

  Ciao
          Jörg
--
Joerg Mayer                                          <jmayer@xxxxxxxxx>
I found out that "pro" means "instead of" (as in proconsul). Now I know
what proactive means.
--- gtk/column_prefs.c
+++ gtk/column_prefs.c
@@ -176,7 +176,7 @@
     mitem = gtk_menu_item_new_with_label(col_format_desc(i));
     gtk_menu_append(GTK_MENU(menu), mitem);
     gtk_signal_connect( GTK_OBJECT(mitem), "activate",
-      GTK_SIGNAL_FUNC(column_menu_changed_cb), (gpointer) i);
+      GTK_SIGNAL_FUNC(column_menu_changed_cb), (gpointer)((long int) i));
     gtk_widget_show(mitem);
   }
   gtk_option_menu_set_menu(GTK_OPTION_MENU(fmt_m), menu);
--- gtk/dfilter_expr_dlg.c
+++ gtk/dfilter_expr_dlg.c
@@ -936,7 +936,8 @@
 	GtkWidget *list_bb, *alignment, *accept_bt, *close_bt;
 	GtkCTreeNode *protocol_node, *item_node;
 	header_field_info       *hfinfo;
-	int i, len;
+	int len;
+	long int i;
 	void *cookie;
 	gchar *name;
 	GHashTable *proto_array;
@@ -1123,7 +1124,7 @@
 		/* Create a node for the item, and put it
 		   under its parent protocol. */
 		protocol_node = g_hash_table_lookup(proto_array,
-				(gpointer)proto_registrar_get_parent(i));
+				(gpointer)((long int) proto_registrar_get_parent(i)));
 		item_node = gtk_ctree_insert_node(GTK_CTREE(tree),
 		    protocol_node, NULL,
 		    &hfinfo->name, 5,
--- gtk/file_dlg.c
+++ gtk/file_dlg.c
@@ -332,7 +332,7 @@
 set_file_type_list(GtkWidget *option_menu)
 {
   GtkWidget *ft_menu, *ft_menu_item;
-  int ft;
+  long int ft;
   guint index;
   guint item_to_select;
 
@@ -371,7 +371,7 @@
 static void
 select_file_type_cb(GtkWidget *w _U_, gpointer data)
 {
-  int new_filetype = (int)data;
+  long int new_filetype = (int)((long int) data);
 
   if (filetype != new_filetype) {
     /* We can select only the filtered or marked packets to be saved if we can
--- packet-dcerpc.c
+++ packet-dcerpc.c
@@ -521,7 +521,7 @@
 dcerpc_bind_hash (gconstpointer k)
 {
     dcerpc_bind_key *key = (dcerpc_bind_key *)k;
-    return ((guint)key->conv) + key->ctx_id + key->smb_fid;
+    return ((guint)((long int)key->conv)) + key->ctx_id + key->smb_fid;
 }
 
 /*
--- packet-rpc.c
+++ packet-rpc.c
@@ -435,7 +435,7 @@
 {
 	rpc_call_info_key* key = (rpc_call_info_key*) k;
 
-	return key->xid + (guint32)(key->conversation);
+	return key->xid + (guint32)((long int)(key->conversation));
 }
 
 
--- packet-ssl.c
+++ packet-ssl.c
@@ -602,7 +602,7 @@
     conv_data = conversation_get_proto_data(conversation, proto_ssl);
     if (conv_data != NULL)
     {
-        conv_version = (guint)conv_data;
+        conv_version = (guint)((long int)conv_data);
     }
 
     /* Initialize the protocol column; we'll set it later when we
@@ -734,7 +734,7 @@
          * this conversation, do so. */
         if (conv_data == NULL)
         {
-            conv_data = (void *)conv_version;
+            conv_data = (void *)((long int)conv_version);
             conversation_add_proto_data(conversation, proto_ssl, conv_data);
         }
 
@@ -2191,7 +2191,7 @@
         /* get rid of the current data */
         conversation_delete_proto_data(conversation, proto_ssl);
     }
-    conversation_add_proto_data(conversation, proto_ssl, (void *)version);
+    conversation_add_proto_data(conversation, proto_ssl, (void *)((long int)version));
 }
 
 static int
Index: packet-dcerpc.c
===================================================================
RCS file: /usr/local/cvsroot/ethereal/packet-dcerpc.c,v
retrieving revision 1.79
diff -u -p -r1.79 packet-dcerpc.c
--- packet-dcerpc.c	26 Sep 2002 06:13:07 -0000	1.79
+++ packet-dcerpc.c	9 Oct 2002 23:52:56 -0000
@@ -532,7 +532,7 @@ static guint
 dcerpc_bind_hash (gconstpointer k)
 {
     dcerpc_bind_key *key = (dcerpc_bind_key *)k;
-    return ((guint)key->conv) + key->ctx_id + key->smb_fid;
+    return key->ctx_id + key->smb_fid;
 }
 
 /*
Index: packet-rpc.c
===================================================================
RCS file: /usr/local/cvsroot/ethereal/packet-rpc.c,v
retrieving revision 1.104
diff -u -p -r1.104 packet-rpc.c
--- packet-rpc.c	4 Sep 2002 09:40:24 -0000	1.104
+++ packet-rpc.c	9 Oct 2002 23:52:57 -0000
@@ -413,7 +413,7 @@ rpc_call_hash(gconstpointer k)
 {
 	rpc_call_info_key* key = (rpc_call_info_key*) k;
 
-	return key->xid + (guint32)(key->conversation);
+	return key->xid;
 }
 
 
Index: gtk/column_prefs.c
===================================================================
RCS file: /usr/local/cvsroot/ethereal/gtk/column_prefs.c,v
retrieving revision 1.13
diff -u -p -r1.13 column_prefs.c
--- gtk/column_prefs.c	5 Sep 2002 18:47:45 -0000	1.13
+++ gtk/column_prefs.c	9 Oct 2002 23:52:58 -0000
@@ -174,7 +174,7 @@ column_prefs_show() {
     mitem = gtk_menu_item_new_with_label(col_format_desc(i));
     gtk_menu_append(GTK_MENU(menu), mitem);
     gtk_signal_connect( GTK_OBJECT(mitem), "activate",
-      GTK_SIGNAL_FUNC(column_menu_changed_cb), (gpointer) i);
+      GTK_SIGNAL_FUNC(column_menu_changed_cb), &i);
     gtk_widget_show(mitem);
   }
   gtk_option_menu_set_menu(GTK_OPTION_MENU(fmt_m), menu);
@@ -300,7 +300,7 @@ column_menu_changed_cb(GtkWidget *w _U_,
   GList      *clp;
 
   if (cur_row >= 0) {
-    cur_fmt = (gint) data;
+    cur_fmt = *(gint *)data;
     clp     = gtk_clist_get_row_data(GTK_CLIST(column_l), cur_row);
     cfmt    = (fmt_data *) clp->data;
 
Index: gtk/dfilter_expr_dlg.c
===================================================================
RCS file: /usr/local/cvsroot/ethereal/gtk/dfilter_expr_dlg.c,v
retrieving revision 1.29
diff -u -p -r1.29 dfilter_expr_dlg.c
--- gtk/dfilter_expr_dlg.c	9 Oct 2002 23:03:11 -0000	1.29
+++ gtk/dfilter_expr_dlg.c	9 Oct 2002 23:52:58 -0000
@@ -7,7 +7,7 @@
  * Copyright 2000, Jeffrey C. Foster <jfoste@xxxxxxxxxxxx> and
  * Guy Harris <guy@xxxxxxxxxxxx>
  *
- * $Id: dfilter_expr_dlg.c,v 1.29 2002/10/09 23:03:11 jmayer Exp $
+ * $Id: dfilter_expr_dlg.c,v 1.28 2002/09/05 18:47:45 jmayer Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@xxxxxxxxxxxx>
@@ -931,6 +931,7 @@ dfilter_expr_dlg_new(GtkWidget *filter_t
 	GtkCTreeNode *protocol_node, *item_node;
 	header_field_info       *hfinfo;
 	int i, len;
+	int parent;
 	void *cookie;
 	gchar *name;
 	GHashTable *proto_array;
@@ -1116,8 +1117,8 @@ dfilter_expr_dlg_new(GtkWidget *filter_t
 
 		/* Create a node for the item, and put it
 		   under its parent protocol. */
-		protocol_node = g_hash_table_lookup(proto_array,
-				(gpointer)proto_registrar_get_parent(i));
+		parent = proto_registrar_get_parent(i);
+		protocol_node = g_hash_table_lookup(proto_array, &parent);
 		item_node = gtk_ctree_insert_node(GTK_CTREE(tree),
 		    protocol_node, NULL,
 		    &hfinfo->name, 5,
Index: gtk/file_dlg.c
===================================================================
RCS file: /usr/local/cvsroot/ethereal/gtk/file_dlg.c,v
retrieving revision 1.52
diff -u -p -r1.52 file_dlg.c
--- gtk/file_dlg.c	9 Sep 2002 20:38:58 -0000	1.52
+++ gtk/file_dlg.c	9 Oct 2002 23:52:59 -0000
@@ -324,7 +324,7 @@ static void
 set_file_type_list(GtkWidget *option_menu)
 {
   GtkWidget *ft_menu, *ft_menu_item;
-  int ft;
+  gint ft;
   guint index;
   guint item_to_select;
 
@@ -350,7 +350,7 @@ set_file_type_list(GtkWidget *option_men
       item_to_select = index;
     }
     gtk_signal_connect(GTK_OBJECT(ft_menu_item), "activate",
-      GTK_SIGNAL_FUNC(select_file_type_cb), (gpointer)ft);
+      GTK_SIGNAL_FUNC(select_file_type_cb), &ft);
     gtk_menu_append(GTK_MENU(ft_menu), ft_menu_item);
     gtk_widget_show(ft_menu_item);
     index++;
@@ -363,7 +363,7 @@ set_file_type_list(GtkWidget *option_men
 static void
 select_file_type_cb(GtkWidget *w _U_, gpointer data)
 {
-  int new_filetype = (int)data;
+  gint new_filetype = *(gint *)data;
 
   if (filetype != new_filetype) {
     /* We can select only the filtered or marked packets to be saved if we can
Index: gtk2/column_prefs.c
===================================================================
RCS file: /usr/local/cvsroot/ethereal/gtk2/column_prefs.c,v
retrieving revision 1.4
diff -u -p -r1.4 column_prefs.c
--- gtk2/column_prefs.c	14 Sep 2002 10:07:39 -0000	1.4
+++ gtk2/column_prefs.c	9 Oct 2002 23:52:59 -0000
@@ -190,7 +190,7 @@ column_prefs_show() {
     mitem = gtk_menu_item_new_with_label(col_format_desc(i));
     gtk_menu_append(GTK_MENU(menu), mitem);
     g_signal_connect(G_OBJECT(mitem), "activate",
-                     G_CALLBACK(column_menu_changed_cb), (gpointer) i);
+                     G_CALLBACK(column_menu_changed_cb), &i);
     gtk_widget_show(mitem);
   }
   gtk_option_menu_set_menu(GTK_OPTION_MENU(fmt_m), menu);
@@ -351,7 +351,7 @@ column_menu_changed_cb(GtkWidget *w _U_,
     sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(column_l));
     if (gtk_tree_selection_get_selected(sel, &model, &iter))
     {
-        cur_fmt = (gint) data;
+        cur_fmt = *(gint *)data;
         gtk_tree_model_get(model, &iter, 2, &clp, -1);
         cfmt    = (fmt_data *) clp->data;
 
Index: gtk2/file_dlg.c
===================================================================
RCS file: /usr/local/cvsroot/ethereal/gtk2/file_dlg.c,v
retrieving revision 1.4
diff -u -p -r1.4 file_dlg.c
--- gtk2/file_dlg.c	9 Sep 2002 20:39:01 -0000	1.4
+++ gtk2/file_dlg.c	9 Oct 2002 23:52:59 -0000
@@ -318,7 +318,7 @@ static void
 set_file_type_list(GtkWidget *option_menu)
 {
   GtkWidget *ft_menu, *ft_menu_item;
-  int ft;
+  gint ft;
   guint index;
   guint item_to_select;
 
@@ -344,7 +344,7 @@ set_file_type_list(GtkWidget *option_men
       item_to_select = index;
     }
     g_signal_connect(G_OBJECT(ft_menu_item), "activate",
-                     G_CALLBACK(select_file_type_cb), (gpointer)ft);
+                     G_CALLBACK(select_file_type_cb), &ft);
     gtk_menu_append(GTK_MENU(ft_menu), ft_menu_item);
     gtk_widget_show(ft_menu_item);
     index++;
@@ -357,7 +357,7 @@ set_file_type_list(GtkWidget *option_men
 static void
 select_file_type_cb(GtkWidget *w _U_, gpointer data)
 {
-  int new_filetype = (int)data;
+  int new_filetype = *(gint *)data;
 
   if (filetype != new_filetype) {
     /* We can select only the filtered or marked packets to be saved if we can