ORBit and ANSI C disaster



This is cc'ed to orbit-list@cuc.edu. I found that address in one of the
files in ORBit's docs directory. I don't know if that list still exists or
if it accepts postings from non-subscribers. If it's closed, could somebody
remail this to ORBit people? I'm too frustrated to deal with that thing
any more.

In short, ORBit can't be compiled without gcc and files produced with
orbit-idl also can't be compiled without gcc. I wouldn't have anything against
that if there was a warning about it somewhere. Configure script should
have refused to work without gcc, but it didn't, of course.

I tried to compile it on Solaris 7 using cc 5.0 in 32 bit environment. But...

The first bug was simple: popt/popthelp.c needs `#include <alloca.h>'.

Then src/daemons/interface_repository/interface_repository.idl could not
be compiled. It turned out that Solaris' lex & yacc weren't doing what
they were supposed to do. Configure, of course, didn't have anything against
them. I don't know if the bug is in Solaris utilities or in ORGit's code
(although I suspect the latter) and I don't know if the problem is in
only one of them or both. So I installed flex and bison and things worked.

Then there was trouble with indent. There is a #define in
idl-compiler/orbit-c-backend.c which binds command line flags to it, but
Solaris' indent also needs `-st' to behave as authors intended. Configure,
needless to say, didn't do a thing about it.

Then the troubles with non-ANSI C started. The code is full of statements
like this:

   (uchar *)a->b += c;

That is an error. Casts don't yield an lvalue, so you can't assign something
to it. gcc groks that, but that has never been in any standard. As far
as I know. There is a 16K patch attached which corrects things like that
in several files. It should be applied in src/orb directory. ORBit version
is 0.4.0.

Next, macros in orb/allocator-defs.h are, as the comment there says, a crap.
This was the first time I've seen a compiler which produces
"warning: syntax error" kind of message and compiles anyway. Most of
the macros expand to ` ; <some-statement>'. Semicolon outside of a function
body is a syntax error.

After fixing all that, my compiler happily showed hundreds of warnings
(actually errors) in interface_repository-stubs.c. And that file was
produced by orbit-idl. All of the errors were assignments to a cast.
At that point it became meaningless to mess with the whole thing.

-- 
 .-.   .-.    Life is a sexually transmitted disease.
(_  \ /  _)
     |        dave@srce.hr
     |        dave@fly.cc.fer.hr
--- corba_any.c.orig	Sat Mar  6 17:29:15 1999
+++ corba_any.c	Sat Mar  6 17:53:58 1999
@@ -111,40 +111,40 @@
     case CORBA_tk_short:
 	*val = ALIGN_ADDRESS(*val, ALIGNOF_CORBA_SHORT);
 	giop_message_buffer_append_mem_a(GIOP_MESSAGE_BUFFER(buf), *val, sizeof(CORBA_short));
-	(guchar *)*val += sizeof(CORBA_short);
+	*val = (guchar *)*val + sizeof(CORBA_short);
 	break;
     case CORBA_tk_enum:
     case CORBA_tk_long:
     case CORBA_tk_ulong:
 	*val = ALIGN_ADDRESS(*val, ALIGNOF_CORBA_LONG);
 	giop_message_buffer_append_mem_a(GIOP_MESSAGE_BUFFER(buf), *val, sizeof(CORBA_long));
-	(guchar *)*val += sizeof(CORBA_long);
+	*val = (guchar *)*val + sizeof(CORBA_long);
 	break;
     case CORBA_tk_float:
 	*val = ALIGN_ADDRESS(*val, ALIGNOF_CORBA_FLOAT);
 	giop_message_buffer_append_mem_a(GIOP_MESSAGE_BUFFER(buf), *val, sizeof(CORBA_float));
-	(guchar *)*val += sizeof(CORBA_float);
+	*val = (guchar *)*val + sizeof(CORBA_float);
 	break;
     case CORBA_tk_double:
 	*val = ALIGN_ADDRESS(*val, ALIGNOF_CORBA_DOUBLE);
 	giop_message_buffer_append_mem_a(GIOP_MESSAGE_BUFFER(buf), *val, sizeof(CORBA_double));
-	(guchar *)*val += sizeof(CORBA_double);
+	*val = (guchar *)*val + sizeof(CORBA_double);
 	break;
     case CORBA_tk_boolean:
     case CORBA_tk_char:
     case CORBA_tk_octet:
 	giop_message_buffer_append_mem(GIOP_MESSAGE_BUFFER(buf), *val, sizeof(CORBA_octet));
-	(guchar *)*val += sizeof(CORBA_octet);
+	*val = (guchar *)*val + sizeof(CORBA_octet);
 	break;
     case CORBA_tk_any:
 	*val = ALIGN_ADDRESS(*val, MAX(ALIGNOF_CORBA_STRUCT, ALIGNOF_CORBA_POINTER));
 	ORBit_marshal_any(buf, *val);
-	(guchar *)*val += sizeof(CORBA_any);
+	*val = (guchar *)*val + sizeof(CORBA_any);
 	break;
     case CORBA_tk_TypeCode:
 	*val = ALIGN_ADDRESS(*val, ALIGNOF_CORBA_POINTER);
 	ORBit_encode_CORBA_TypeCode(*val, buf);
-	(guchar *)*val += sizeof(CORBA_TypeCode);
+	*val = (guchar *)*val + sizeof(CORBA_TypeCode);
 	break;
     case CORBA_tk_Principal:
 	*val = ALIGN_ADDRESS(*val,
@@ -157,12 +157,12 @@
 	giop_message_buffer_append_mem(GIOP_MESSAGE_BUFFER(buf),
 				       *(char**)((char *)*val+sizeof(CORBA_unsigned_long)),
 				       ulval);
-	(guchar *)*val += sizeof(CORBA_Principal);
+	*val = (guchar *)*val + sizeof(CORBA_Principal);
 	break;
     case CORBA_tk_objref:
 	*val = ALIGN_ADDRESS(*val, ALIGNOF_CORBA_POINTER);
 	ORBit_marshal_object(buf, *val);
-	(guchar *)*val += sizeof(CORBA_Object);
+	*val = (guchar *)*val + sizeof(CORBA_Object);
 	break;
     case CORBA_tk_except:
     case CORBA_tk_struct:
@@ -194,7 +194,7 @@
 					       sizeof(CORBA_unsigned_long));
 	giop_message_buffer_append_mem(GIOP_MESSAGE_BUFFER(buf), *(char **)*val, ulval);
 	
-	(guchar *)*val += sizeof(char *);
+	*val = (guchar *)*val + sizeof(char *);
 	break;
     case CORBA_tk_string:
 	ulval = strlen(*(char **)*val) + 1;
@@ -206,7 +206,7 @@
 					       sizeof(CORBA_unsigned_long));
 	giop_message_buffer_append_mem(GIOP_MESSAGE_BUFFER(buf), *(char **)*val, ulval);
 	
-	(guchar *)*val += sizeof(char *);
+	*val = (guchar *)*val +sizeof(char *);
 	break;
     case CORBA_tk_sequence:
 	{
@@ -224,7 +224,7 @@
 	    for(i = 0; i < sval->_length; i++)
 		ORBit_marshal_value(buf, &subval, tc->subtypes[0], mi);
 	    
-	    (guchar *)*val += sizeof(CORBA_sequence_octet);
+	    *val = (guchar *)*val + sizeof(CORBA_sequence_octet);
 	}
 	break;
     case CORBA_tk_array:
@@ -460,7 +460,7 @@
     return retval;
 }
 
-#define DM_GET_ATOM(x, n) G_STMT_START{ GIOP_RECV_BUFFER(buf)->decoder(x, (GIOP_RECV_BUFFER(buf)->cur), n); ((char *)GIOP_RECV_BUFFER(buf)->cur) += n; }G_STMT_END
+#define DM_GET_ATOM(x, n) G_STMT_START{ GIOP_RECV_BUFFER(buf)->decoder(x, (GIOP_RECV_BUFFER(buf)->cur), n); GIOP_RECV_BUFFER(buf)->cur = ((char *)GIOP_RECV_BUFFER(buf)->cur) + n; }G_STMT_END
 
 static void
 ORBit_demarshal_value(GIOPRecvBuffer *buf,
@@ -483,7 +483,7 @@
 	*val = ALIGN_ADDRESS(*val, ALIGNOF_CORBA_SHORT);
 	buf->cur = ALIGN_ADDRESS(buf->cur, sizeof(CORBA_short));
 	DM_GET_ATOM(*val, sizeof(CORBA_short));
-	(guchar *)*val += sizeof(CORBA_short);
+	*val = (guchar *)*val + sizeof(CORBA_short);
 	break;
     case CORBA_tk_long:
     case CORBA_tk_ulong:
@@ -491,38 +491,38 @@
 	*val = ALIGN_ADDRESS(*val, ALIGNOF_CORBA_LONG);
 	buf->cur = ALIGN_ADDRESS(buf->cur, sizeof(CORBA_long));
 	DM_GET_ATOM(*val, sizeof(CORBA_long));
-	(guchar *)*val += sizeof(CORBA_long);
+	*val = (guchar *)*val + sizeof(CORBA_long);
 	break;
     case CORBA_tk_longlong:
     case CORBA_tk_ulonglong:
 	*val = ALIGN_ADDRESS(*val, ALIGNOF_CORBA_LONG_LONG);
 	buf->cur = ALIGN_ADDRESS(buf->cur, sizeof(CORBA_long_long));
 	DM_GET_ATOM(*val, sizeof(CORBA_long_long));
-	(guchar *)*val += sizeof(CORBA_long_long);
+	*val = (guchar *)*val +sizeof(CORBA_long_long);
 	break;
     case CORBA_tk_longdouble:
 	*val = ALIGN_ADDRESS(*val, ALIGNOF_CORBA_LONG_DOUBLE);
 	buf->cur = ALIGN_ADDRESS(buf->cur, sizeof(CORBA_long_double));
 	DM_GET_ATOM(*val, sizeof(CORBA_long_double));
-	(guchar *)*val += sizeof(CORBA_long_double);
+	*val = (guchar *)*val + sizeof(CORBA_long_double);
 	break;
     case CORBA_tk_float:
 	*val = ALIGN_ADDRESS(*val, ALIGNOF_CORBA_FLOAT);
 	buf->cur = ALIGN_ADDRESS(buf->cur, sizeof(CORBA_float));
 	DM_GET_ATOM(*val, sizeof(CORBA_float));
-	(guchar *)*val += sizeof(CORBA_float);
+	*val = (guchar *)*val + sizeof(CORBA_float);
 	break;
     case CORBA_tk_double:
 	*val = ALIGN_ADDRESS(*val, ALIGNOF_CORBA_DOUBLE);
 	buf->cur = ALIGN_ADDRESS(buf->cur, sizeof(CORBA_double));
 	DM_GET_ATOM(*val, sizeof(CORBA_double));
-	(guchar *)*val += sizeof(CORBA_double);
+	*val = (guchar *)*val + sizeof(CORBA_double);
 	break;
     case CORBA_tk_boolean:
     case CORBA_tk_char:
     case CORBA_tk_octet:
 	DM_GET_ATOM(*val, sizeof(CORBA_octet));
-	(guchar *)*val += sizeof(CORBA_octet);
+	*val = (guchar *)*val + sizeof(CORBA_octet);
 	break;
     case CORBA_tk_any:
 	{
@@ -534,14 +534,14 @@
 	    decoded = *val;
 	    decoded->_release = CORBA_FALSE;
 	    ORBit_demarshal_any(buf, decoded, dup_strings, orb);
-	    (guchar *)*val += sizeof(CORBA_any);
+	    *val = (guchar *)*val + sizeof(CORBA_any);
 	}
 	break;
     case CORBA_tk_TypeCode:
 	*val = ALIGN_ADDRESS(*val, ALIGNOF_CORBA_POINTER);
 	ORBit_decode_CORBA_TypeCode(*val, buf);
 	CORBA_Object_duplicate(*(CORBA_Object *)*val, NULL);
-	(guchar *)*val += sizeof(CORBA_TypeCode);
+	*val = (guchar *)*val + sizeof(CORBA_TypeCode);
 	break;
     case CORBA_tk_Principal:
 	{
@@ -556,14 +556,14 @@
 	    DM_GET_ATOM(&p->_length, sizeof(CORBA_long));
 	    p->_buffer = ORBit_alloc(p->_length, NULL, GINT_TO_POINTER(1));
 	    memcpy(p->_buffer, buf->cur, p->_length);
-	    (char *)buf->cur += p->_length;
-	    (guchar *)*val += sizeof(CORBA_sequence_octet);
+	    buf->cur = (char *)buf->cur + p->_length;
+	    *val = (guchar *)*val + sizeof(CORBA_sequence_octet);
 	}
 	break;
     case CORBA_tk_objref:
 	*val = ALIGN_ADDRESS(*val, ALIGNOF_CORBA_POINTER);
 	*(CORBA_Object *)*val = ORBit_demarshal_object(buf, orb);
-	(guchar *)*val += sizeof(CORBA_Object);
+	*val = (guchar *)*val + sizeof(CORBA_Object);
 	break;
     case CORBA_tk_except:
     case CORBA_tk_struct:
@@ -597,7 +597,7 @@
 	    *(char **)*val = CORBA_string_dup(buf->cur);
 	else
 	    *(char **)*val = buf->cur;
-	(guchar *)*val += sizeof(CORBA_char *);
+	*val = (guchar *)*val + sizeof(CORBA_char *);
 	break;
     case CORBA_tk_sequence:
 	{
@@ -616,7 +616,7 @@
 		   all atoms... */
 		p->_buffer = ORBit_alloc(p->_length, NULL, GINT_TO_POINTER(1));
 		memcpy(p->_buffer, buf->cur, p->_length);
-		(char *)buf->cur += p->_length;
+		buf->cur = (char *)buf->cur + p->_length;
 	    } else {
 		p->_buffer = ORBit_demarshal_allocate_mem(tc->subtypes[0],
 							  p->_length);
@@ -629,7 +629,7 @@
 					  orb);
 	    }
 
-	    (guchar *)*val += sizeof(CORBA_sequence_octet);
+	    *val = (guchar *)*val + sizeof(CORBA_sequence_octet);
 	}
 	break;
     case CORBA_tk_array:
@@ -694,8 +694,8 @@
 	*val = ALIGN_ADDRESS(*val, ALIGNOF_CORBA_SHORT);
 	*newval = ALIGN_ADDRESS(*newval, ALIGNOF_CORBA_SHORT);
 	*(CORBA_short *)*newval = *(CORBA_short *)*val;
-	(guchar *)*val += sizeof(CORBA_short);
-	(guchar *)*newval += sizeof(CORBA_short);
+	*val = (guchar *)*val + sizeof(CORBA_short);
+	*newval = (guchar *)*newval + sizeof(CORBA_short);
 	break;
     case CORBA_tk_enum:
     case CORBA_tk_long:
@@ -703,44 +703,44 @@
 	*val = ALIGN_ADDRESS(*val, ALIGNOF_CORBA_LONG);
 	*newval = ALIGN_ADDRESS(*newval, ALIGNOF_CORBA_LONG);
 	*(CORBA_long *)*newval = *(CORBA_long *)*val;
-	(guchar *)*val += sizeof(CORBA_long);
-	(guchar *)*newval += sizeof(CORBA_long);
+	*val = (guchar *)*val + sizeof(CORBA_long);
+	*newval = (guchar *)*newval + sizeof(CORBA_long);
 	break;
     case CORBA_tk_longlong:
     case CORBA_tk_ulonglong:
 	*val = ALIGN_ADDRESS(*val, ALIGNOF_CORBA_LONG_LONG);
 	*newval = ALIGN_ADDRESS(*newval, ALIGNOF_CORBA_LONG_LONG);
 	*(CORBA_long_long *)*newval = *(CORBA_long_long *)*val;
-	(guchar *)*val += sizeof(CORBA_long_long);
-	(guchar *)*newval += sizeof(CORBA_long_long);
+	*val = (guchar *)*val + sizeof(CORBA_long_long);
+	*newval = (guchar *)*newval + sizeof(CORBA_long_long);
 	break;
     case CORBA_tk_longdouble:
 	*val = ALIGN_ADDRESS(*val, ALIGNOF_CORBA_LONG_DOUBLE);
 	*newval = ALIGN_ADDRESS(*newval, ALIGNOF_CORBA_LONG_DOUBLE);
 	*(CORBA_long_double *)*newval = *(CORBA_long_double *)*val;
-	(guchar *)*val += sizeof(CORBA_long_double);
-	(guchar *)*newval += sizeof(CORBA_long_double);
+	*val = (guchar *)*val + sizeof(CORBA_long_double);
+	*newval = (guchar *)*newval + sizeof(CORBA_long_double);
 	break;
     case CORBA_tk_float:
 	*val = ALIGN_ADDRESS(*val, ALIGNOF_CORBA_FLOAT);
 	*newval = ALIGN_ADDRESS(*newval, ALIGNOF_CORBA_FLOAT);
 	*(CORBA_long *)*newval = *(CORBA_long *)*val;
-	(guchar *)*val += sizeof(CORBA_float);
-	(guchar *)*newval += sizeof(CORBA_float);
+	*val = (guchar *)*val + sizeof(CORBA_float);
+	*newval = (guchar *)*newval + sizeof(CORBA_float);
 	break;
     case CORBA_tk_double:
 	*val = ALIGN_ADDRESS(*val, ALIGNOF_CORBA_DOUBLE);
 	*newval = ALIGN_ADDRESS(*newval, ALIGNOF_CORBA_DOUBLE);
 	*(CORBA_double *)*newval = *(CORBA_double *)*val;
-	(guchar *)*val += sizeof(CORBA_double);
-	(guchar *)*newval += sizeof(CORBA_double);
+	*val = (guchar *)*val + sizeof(CORBA_double);
+	*newval = (guchar *)*newval + sizeof(CORBA_double);
 	break;
     case CORBA_tk_boolean:
     case CORBA_tk_char:
     case CORBA_tk_octet:
 	*(CORBA_octet *)*newval = *(CORBA_octet *)*val;
-	(guchar *)*val += sizeof(CORBA_octet);
-	(guchar *)*newval += sizeof(CORBA_octet);
+	*val = (guchar *)*val + sizeof(CORBA_octet);
+	*newval = (guchar *)*newval + sizeof(CORBA_octet);
 	break;
     case CORBA_tk_any:
 	{
@@ -754,8 +754,8 @@
                == FALSE? */
 	    newany->_value = ORBit_copy_value(oldany->_value, oldany->_type);
 	    newany->_release = CORBA_TRUE;
-	    (guchar *)*val += sizeof(CORBA_any);
-	    (guchar *)*newval += sizeof(CORBA_any);
+	    *val = (guchar *)*val + sizeof(CORBA_any);
+	    *newval = (guchar *)*newval + sizeof(CORBA_any);
 	}
 	break;
     case CORBA_tk_Principal:
@@ -773,8 +773,8 @@
 	memcpy(((CORBA_Principal *)*newval)->_buffer,
 	       ((CORBA_Principal *)*val)->_buffer,
 	       ((CORBA_Principal *)*val)->_length);
-	(guchar *)*val += sizeof(CORBA_Principal);
-	(guchar *)*newval += sizeof(CORBA_Principal);
+	*val = (guchar *)*val + sizeof(CORBA_Principal);
+	*newval = (guchar *)*newval + sizeof(CORBA_Principal);
 	break;
     case CORBA_tk_TypeCode:
     case CORBA_tk_objref:
@@ -782,8 +782,8 @@
 	*newval = ALIGN_ADDRESS(*newval, ALIGNOF_CORBA_POINTER);
 	*(CORBA_Object *)*newval = CORBA_Object_duplicate(*(CORBA_Object *)*val,
 							  NULL);
-	(guchar *)*val += sizeof(CORBA_Object);
-	(guchar *)*newval += sizeof(CORBA_Object);
+	*val = (guchar *)*val + sizeof(CORBA_Object);
+	*newval = (guchar *)*newval + sizeof(CORBA_Object);
 	break;
     case CORBA_tk_struct:
     case CORBA_tk_except:
@@ -812,8 +812,8 @@
 	*newval = ALIGN_ADDRESS(*newval, ALIGNOF_CORBA_POINTER);
 	
 	*(CORBA_char **)*newval = CORBA_string_dup(*(CORBA_char **)*val);
-	(guchar *)*val += sizeof(CORBA_char *);
-	(guchar *)*newval += sizeof(CORBA_char *);
+	*val = (guchar *)*val + sizeof(CORBA_char *);
+	*newval = (guchar *)*newval + sizeof(CORBA_char *);
 	break;
     case CORBA_tk_sequence:
 	*val = ALIGN_ADDRESS(*val,
@@ -834,8 +834,8 @@
 	for(i = 0; i < ((CORBA_Principal *)*newval)->_length; i++) {
 	    _ORBit_copy_value(&pval1, &pval2, tc->subtypes[0]);
 	}
-	(guchar *)*val += sizeof(CORBA_sequence_octet);
-	(guchar *)*newval += sizeof(CORBA_sequence_octet);
+	*val = (guchar *)*val + sizeof(CORBA_sequence_octet);
+	*newval = (guchar *)*newval + sizeof(CORBA_sequence_octet);
 	break;
     case CORBA_tk_array:
 	for(i = 0; i < tc->length; i++) {
--- env.c.orig	Sat Mar  6 16:29:24 1999
+++ env.c	Sat Mar  6 16:31:44 1999
@@ -213,11 +213,11 @@
 
 	rb->cur = ALIGN_ADDRESS(rb->cur, sizeof(len));
 	rb->decoder(&len, rb->cur, sizeof(len));
-	(guchar *)rb->cur += sizeof(len);
+	rb->cur = (guchar *)rb->cur + sizeof(len);
 
 	if(len) {
 		my_repoid = rb->cur;
-		(guchar *)rb->cur += len;
+		rb->cur = (guchar *)rb->cur + len;
 	} else
 		my_repoid = NULL;
 
@@ -225,7 +225,7 @@
 		ev->_major = CORBA_SYSTEM_EXCEPTION;
 		rb->cur = ALIGN_ADDRESS(rb->cur, sizeof(minor));
 		rb->decoder(&minor, rb->cur, sizeof(len));
-		(guchar *)rb->cur += sizeof(len);
+		rb->cur = (guchar *)rb->cur + sizeof(len);
 
 		for(minor = 1; exception_table[minor].repo_id; minor++) {
 			if(!strcmp(exception_table[minor].repo_id, my_repoid))
@@ -234,7 +234,7 @@
 
 		rb->cur = ALIGN_ADDRESS(rb->cur, sizeof(completion_status));
 		rb->decoder(&completion_status, rb->cur, sizeof(completion_status));
-		(guchar *)rb->cur += sizeof(completion_status);
+		rb->cur = (guchar *)rb->cur + sizeof(completion_status);
 
 		new=ORBit_alloc(sizeof(CORBA_SystemException), NULL, NULL);
 
--- orbit_object.c.orig	Sat Mar  6 16:40:01 1999
+++ orbit_object.c	Sat Mar  6 17:26:32 1999
@@ -177,7 +177,7 @@
 	obj->interface = epv;
 }
 
-#define GET_ATOM(x) G_STMT_START{ GIOP_RECV_BUFFER(recv_buffer)->decoder(&x, (GIOP_RECV_BUFFER(recv_buffer)->cur), sizeof(x)); ((guchar *)GIOP_RECV_BUFFER(recv_buffer)->cur) += sizeof(x); }G_STMT_END
+#define GET_ATOM(x) G_STMT_START{ GIOP_RECV_BUFFER(recv_buffer)->decoder(&x, (GIOP_RECV_BUFFER(recv_buffer)->cur), sizeof(x)); GIOP_RECV_BUFFER(recv_buffer)->cur = ((guchar *)GIOP_RECV_BUFFER(recv_buffer)->cur) + sizeof(x); }G_STMT_END
 #define ALIGNFOR(x) recv_buffer->cur = ALIGN_ADDRESS(recv_buffer->cur, sizeof(x))
 
 CORBA_Object
@@ -244,7 +244,7 @@
 		CDR_codec_init_static(codec);
 		codec->buffer = recv_buffer->cur;
 		codec->release_buffer = CORBA_FALSE;
-		((guchar *)recv_buffer->cur) += subpart_len;
+		recv_buffer->cur = (guchar *)recv_buffer->cur + subpart_len;
 
 		codec->readonly = CORBA_TRUE;
 		codec->host_endian = codec->data_endian = FLAG_ENDIANNESS;
@@ -281,7 +281,7 @@
 		GET_ATOM(subpart_len);
 		g_warning("IOP_TAG_MULTIPLE_COMPONENTS decoding needs finishing");
 		object_info->profile_type = IOP_TAG_MULTIPLE_COMPONENTS;
-		((guchar *)recv_buffer->cur) += subpart_len;
+		recv_buffer->cur = (guchar *)recv_buffer->cur + subpart_len;
 		return(object_info);
 		break;
 
@@ -290,7 +290,7 @@
 		CDR_codec_init_static(codec);
 		codec->buffer = recv_buffer->cur;
 		codec->release_buffer = CORBA_FALSE;
-		((guchar *)recv_buffer->cur) += subpart_len;
+		recv_buffer->cur = (guchar *)recv_buffer->cur + subpart_len;
 
 		codec->readonly = CORBA_TRUE;
 		codec->host_endian = codec->data_endian = FLAG_ENDIANNESS;
@@ -346,7 +346,7 @@
 	if(len == 0)
 		return(NULL);
 
-	((guchar *)recv_buffer->cur) += len;
+	recv_buffer->cur = (guchar *)recv_buffer + len;
 
 	/* Decode the sequence<TaggedProfile> */
 	ALIGNFOR(CORBA_unsigned_long);
@@ -391,7 +391,7 @@
 		return CORBA_OBJECT_NIL;
 
 	type_id = recv_buffer->cur;
-	((guchar *)recv_buffer->cur) += len;
+	recv_buffer->cur = (guchar *)recv_buffer->cur + len;
 
 	/* Decode the sequence<TaggedProfile> */
 	ALIGNFOR(CORBA_unsigned_long);
--- orbit_typecode.c.orig	Sat Mar  6 17:27:45 1999
+++ orbit_typecode.c	Sat Mar  6 17:28:32 1999
@@ -161,7 +161,7 @@
 	for(l=ctx.prior_tcs;l;l=l->next)
 		g_free(l->data);
 	g_slist_free(ctx.prior_tcs);
-	((guchar *)buf->cur) += codec->rptr;
+	buf->cur = (guchar *)buf->cur + codec->rptr;
 }
 	
 


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