[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Nautilus fix



Am Fr, den 30.07.2004 um 23:47 Uhr +0100 schrieb Matt Kay:
> I did a bit of Googling and found a temporary fix to the bug in Nautilus
> where it crashes on startup,

That one is really annoying.

I did some googling, too, and found bugreports to orbit and orbit2
causing that bug. I downloaded two patches and they work. Unfortunately
I forgot where I got them (since I closed my session to check if the
problem is solved), but I attach both. One patch is against orbit, the
other one against orbit2. Looking at the dependencies it might be the
orbit2-patch is enough.

I'm not a coder, so dont's ask me. :-) I read about some type-problems
expecting a return value being 32 Bit, which is not true on all !32bit
platforms.

Hope it helps.

Bye, Ratti

-- 
 -o) fontlinge | Fontmanagement for Linux | Schriftenverwaltung in Linux
 /\\ http://freshmeat.net/projects/fontlinge/
_\_V http://www.gesindel.de https://sourceforge.net/projects/fontlinge/
--- ORBit-0.5.17/src/orb/allocators.c.alignment	2003-04-01 18:51:46.000000000 -0500
+++ ORBit-0.5.17/src/orb/allocators.c	2003-04-02 05:28:36.000000000 -0500
@@ -185,9 +185,11 @@
 	case CORBA_tk_except:
 	case CORBA_tk_struct:
 		mem = ALIGN_ADDRESS (mem, ORBit_find_alignment (tc));
-		for (i = 0; i < tc->sub_parts; i++)
+		for (i = 0; i < tc->sub_parts; i++) {
+			mem = ALIGN_ADDRESS (mem, ORBit_find_alignment (tc->subtypes[i]));
 			mem = ORBit_free_via_TypeCode (
 				mem, &tc->subtypes[i], CORBA_TRUE);
+		}
 		retval = mem;
 		break;
 	case CORBA_tk_union: {
--- ORBit-0.5.17/src/orb/corba_any.c.alignment	2002-06-06 07:07:39.000000000 -0400
+++ ORBit-0.5.17/src/orb/corba_any.c	2003-04-02 06:35:53.000000000 -0500
@@ -169,6 +169,7 @@
     case CORBA_tk_struct:
 	*val = ALIGN_ADDRESS(*val, ORBit_find_alignment(tc));
 	for(i = 0; i < tc->sub_parts; i++) {
+	    *val = ALIGN_ADDRESS(*val, ORBit_find_alignment(tc->subtypes[i]));
 	    ORBit_marshal_value(buf, val, tc->subtypes[i], mi);
 	}
 	break;
@@ -197,9 +198,10 @@
 	}
 	break;
     case CORBA_tk_wstring:
+	*val = ALIGN_ADDRESS(*val, ALIGNOF_CORBA_POINTER);
+
 	ulval = strlen(*(char **)*val) + 1;
 
-	*val = ALIGN_ADDRESS(*val, ALIGNOF_CORBA_POINTER);
 	giop_send_buffer_append_mem_indirect_a(buf,
 					       &ulval,
 					       sizeof(CORBA_unsigned_long));
@@ -208,10 +210,10 @@
 	*val = ((guchar *)*val) + sizeof(char *);
 	break;
     case CORBA_tk_string:
-	ulval = strlen(*(char **)*val) + 1;
-	
 	*val = ALIGN_ADDRESS(*val, ALIGNOF_CORBA_POINTER);
 
+	ulval = strlen(*(char **)*val) + 1;
+	
 	giop_send_buffer_append_mem_indirect_a(buf,
 					       &ulval,
 					       sizeof(CORBA_unsigned_long));
@@ -595,6 +597,7 @@
     case CORBA_tk_struct:
 	*val = ALIGN_ADDRESS(*val, ORBit_find_alignment(tc));
 	for(i = 0; i < tc->sub_parts; i++) {
+	    *val = ALIGN_ADDRESS(*val, ORBit_find_alignment(tc->subtypes[i]));
 	    ORBit_demarshal_value(buf, val, tc->subtypes[i], dup_strings, orb);
 	}
 	break;
@@ -820,6 +823,8 @@
 	*val = ALIGN_ADDRESS(*val, ORBit_find_alignment(tc));
 	*newval = ALIGN_ADDRESS(*newval, ORBit_find_alignment(tc));
 	for(i = 0; i < tc->sub_parts; i++) {
+	    *val = ALIGN_ADDRESS(*val, ORBit_find_alignment(tc->subtypes[i]));
+	    *newval = ALIGN_ADDRESS(*newval, ORBit_find_alignment(tc->subtypes[i]));
 	    _ORBit_copy_value(val, newval, tc->subtypes[i]);
 	}
 	break;
--- ORBit-0.5.17/src/orb/orbit.c.alignment	2003-04-01 19:02:40.000000000 -0500
+++ ORBit-0.5.17/src/orb/orbit.c	2003-04-02 06:33:28.000000000 -0500
@@ -230,9 +230,12 @@
 		*a = ALIGN_ADDRESS (*a, ORBit_find_alignment (tc));
 		*b = ALIGN_ADDRESS (*b, ORBit_find_alignment (tc));
 
-		for (i = 0; i < tc->sub_parts; i++)
+		for (i = 0; i < tc->sub_parts; i++) {
+			*a = ALIGN_ADDRESS (*a, ORBit_find_alignment (tc->subtypes[i]));
+			*b = ALIGN_ADDRESS (*b, ORBit_find_alignment (tc->subtypes[i]));
 			if (!ORBit_value_equivalent (a, b, tc->subtypes [i], ev))
 				return FALSE;
+		}
 
 		return TRUE;
 	}
diff -Naur --exclude=CVS ORBit2/src/orb/orb-core/allocators.c ORBit2.patched/src/orb/orb-core/allocators.c
--- ORBit2/src/orb/orb-core/allocators.c	2003-07-07 09:11:31.000000000 -0400
+++ ORBit2.patched/src/orb/orb-core/allocators.c	2004-06-17 13:13:07.563883105 -0400
@@ -59,6 +59,7 @@
 	}
 	case CORBA_tk_except:
 	case CORBA_tk_struct:
+		mem = ALIGN_ADDRESS (mem, tc->c_align);
 		for (i = 0; i < tc->sub_parts; i++) {
 			subtc = tc->subtypes [i];
 			mem = ALIGN_ADDRESS (mem, subtc->c_align);
diff -Naur --exclude=CVS ORBit2/src/orb/orb-core/corba-any.c ORBit2.patched/src/orb/orb-core/corba-any.c
--- ORBit2/src/orb/orb-core/corba-any.c	2004-01-16 08:56:12.000000000 -0500
+++ ORBit2.patched/src/orb/orb-core/corba-any.c	2004-06-17 13:13:07.565882999 -0400
@@ -102,6 +102,7 @@
 		     CORBA_TypeCode  tc)
 {
 	CORBA_unsigned_long i, ulval;
+	CORBA_TypeCode      subtc;
 	gconstpointer       subval;
 
 	SKIP_ALIAS (tc);
@@ -168,12 +169,14 @@
 	case CORBA_tk_except:
 	case CORBA_tk_struct:
 		*val = ALIGN_ADDRESS (*val, tc->c_align);
-		for (i = 0; i < tc->sub_parts; i++)
-			ORBit_marshal_value (buf, val, tc->subtypes[i]);
+		for (i = 0; i < tc->sub_parts; i++) {
+			subtc = tc->subtypes[i];
+			*val = ALIGN_ADDRESS (*val, subtc->c_align);
+			ORBit_marshal_value (buf, val, subtc);
+		}
 		break;
 	case CORBA_tk_union: {
 		gconstpointer	discrim, body;
-		CORBA_TypeCode 	subtc;
 		int             sz = 0;
 
 		discrim = *val = ALIGN_ADDRESS (*val, MAX (tc->discriminator->c_align, tc->c_align));
@@ -388,6 +391,7 @@
 		       CORBA_ORB       orb)
 {
 	CORBA_long i;
+	CORBA_TypeCode subtc;
 
 	SKIP_ALIAS (tc);
 
@@ -551,12 +555,13 @@
 	case CORBA_tk_struct:
 		*val = ALIGN_ADDRESS (*val, tc->c_align);
 		for (i = 0; i < tc->sub_parts; i++) {
-			if (ORBit_demarshal_value (tc->subtypes[i], val, buf, orb))
+			subtc = tc->subtypes[i];
+			*val = ALIGN_ADDRESS (*val, subtc->c_align);
+			if (ORBit_demarshal_value (subtc, val, buf, orb))
 				return TRUE;
 		}
 		break;
 	case CORBA_tk_union: {
-		CORBA_TypeCode  subtc;
 		gpointer        discrim;
 		gpointer        body;
 		int	        sz = 0;
@@ -832,12 +837,19 @@
 		*newval = ((guchar *)*newval) + sizeof (CORBA_Object);
 		break;
 	case CORBA_tk_struct:
-	case CORBA_tk_except:
+	case CORBA_tk_except: {
+		CORBA_TypeCode subtc;
+
 		*val = ALIGN_ADDRESS (*val, tc->c_align);
 		*newval = ALIGN_ADDRESS (*newval, tc->c_align);
-		for (i = 0; i < tc->sub_parts; i++)
-			ORBit_copy_value_core (val, newval, tc->subtypes[i]);
+		for (i = 0; i < tc->sub_parts; i++) {
+			subtc = tc->subtypes[i];
+			*val = ALIGN_ADDRESS (*val, subtc->c_align);
+			*newval = ALIGN_ADDRESS (*newval, subtc->c_align);
+			ORBit_copy_value_core (val, newval, subtc);
+		}
 		break;
+	}
 	case CORBA_tk_union: {
 		CORBA_TypeCode utc;
 		gint	       union_align = tc->c_align;
@@ -1021,14 +1033,18 @@
 	case CORBA_tk_struct:
 	case CORBA_tk_except: {
 		int i;
+		CORBA_TypeCode subtc;
 
 		*a = ALIGN_ADDRESS (*a, tc->c_align);
 		*b = ALIGN_ADDRESS (*b, tc->c_align);
 
-		for (i = 0; i < tc->sub_parts; i++)
-			if (!ORBit_value_equivalent (a, b, tc->subtypes [i], ev))
+		for (i = 0; i < tc->sub_parts; i++) {
+			subtc = tc->subtypes[i];
+			*a = ALIGN_ADDRESS (*a, subtc->c_align);
+			*b = ALIGN_ADDRESS (*b, subtc->c_align);
+			if (!ORBit_value_equivalent (a, b, subtc, ev))
 				return FALSE;
-
+		}
 		return TRUE;
 	}
 

Attachment: signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil


Reply to: