]> rtime.felk.cvut.cz Git - frescor/forb.git/commitdiff
Fixed some problems with big-endian architecture
authorMichal Sojka <sojkam1@fel.cvut.cz>
Thu, 23 Apr 2009 05:15:33 +0000 (07:15 +0200)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Thu, 23 Apr 2009 05:15:33 +0000 (07:15 +0200)
Although this patch fixes the most important problems, there are still
some incompatibilities when big-endian machines communicate with
little-endian ones. Big to big communication works correctly.

src/forb_endian.h
src/proto_inet.c

index b4210db8278c2bf6fe86a1e5fe3dcbbc19acb011..863312ed7b5205edc931c637bf215301f5d759bd 100644 (file)
 #ifndef FORB_ENDIAN_H
 #define FORB_ENDIAN_H 1
 
+#include <endian.h>
+#ifdef __BYTE_ORDER
+#if __BYTE_ORDER == __BIG_ENDIAN
+#define WORDS_BIGENDIAN 1
+#endif
+#endif
+
+
 #define FLAG_BIG_ENDIAN 0
 #define FLAG_LITTLE_ENDIAN 1
 
index e9b2759154d3a871b3d5231cf55aa300b395212b..35235c498e50e72e4eb139c0f143135df6988efd 100644 (file)
@@ -103,7 +103,8 @@ static CORBA_boolean
 inet_serialize_addr(FORB_CDR_Codec *codec, const void *addr)
 {
        const struct inet_addr *a = addr;
-       return CORBA_long_serialize(codec, &a->addr.s_addr);
+       CORBA_long haddr = ntohl(a->addr.s_addr);
+       return CORBA_long_serialize(codec, &haddr);
 }
 
 static CORBA_boolean
@@ -117,7 +118,7 @@ inet_deserialize_addr(FORB_CDR_Codec *codec, void **addr)
        if (!a)
                return CORBA_FALSE;
        ret = CORBA_long_deserialize(codec, &s_addr);
-       a->addr.s_addr = s_addr;
+       a->addr.s_addr = htonl(s_addr);
        *addr = a;
        return ret;
 }