From f6b0715b67eadfee2c08dcffa4b765d107a58c9c Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Wed, 21 Dec 2011 14:37:11 +0000 Subject: [PATCH] Use own implementation of endian detection, should fix #1172 git-svn-id: http://svn.osgeo.org/postgis/trunk@8488 b70326c6-7e19-0410-871a-916f4a2858ee --- liblwgeom/liblwgeom_internal.h | 4 ++-- liblwgeom/lwin_wkb.c | 3 +-- liblwgeom/lwout_wkb.c | 7 +++---- liblwgeom/lwutil.c | 4 ++-- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/liblwgeom/liblwgeom_internal.h b/liblwgeom/liblwgeom_internal.h index 7c6068ca5..9cc23d435 100644 --- a/liblwgeom/liblwgeom_internal.h +++ b/liblwgeom/liblwgeom_internal.h @@ -124,8 +124,8 @@ */ /* Machine endianness */ -#define XDR 0 -#define NDR 1 +#define XDR 0 /* big endian */ +#define NDR 1 /* little endian */ extern char getMachineEndian(void); /* Raise an lwerror if srids do not match */ diff --git a/liblwgeom/lwin_wkb.c b/liblwgeom/lwin_wkb.c index 9f80d512e..34f2a5392 100644 --- a/liblwgeom/lwin_wkb.c +++ b/liblwgeom/lwin_wkb.c @@ -11,7 +11,6 @@ #include "liblwgeom_internal.h" #include "lwgeom_log.h" -#include /** * Used for passing the parse state between the parsing functions. @@ -625,7 +624,7 @@ LWGEOM* lwgeom_from_wkb_state(wkb_parse_state *s) /* Check the endianness of our input */ s->swap_bytes = LW_FALSE; - if( BYTE_ORDER == LITTLE_ENDIAN ) /* Machine arch is little */ + if( getMachineEndian() == NDR ) /* Machine arch is little */ { if ( ! wkb_little_endian ) /* Data is big! */ s->swap_bytes = LW_TRUE; diff --git a/liblwgeom/lwout_wkb.c b/liblwgeom/lwout_wkb.c index bb2572cd7..723ac75ae 100644 --- a/liblwgeom/lwout_wkb.c +++ b/liblwgeom/lwout_wkb.c @@ -11,7 +11,6 @@ #include "liblwgeom_internal.h" #include "lwgeom_log.h" -#include static uint8_t* lwgeom_to_wkb_buf(const LWGEOM *geom, uint8_t *buf, uint8_t variant); static size_t lwgeom_to_wkb_size(const LWGEOM *geom, uint8_t variant); @@ -167,8 +166,8 @@ static uint8_t* endian_to_wkb_buf(uint8_t *buf, uint8_t variant) static inline int wkb_swap_bytes(uint8_t variant) { /* If requested variant matches machine arch, we don't have to swap! */ - if ( ((variant & WKB_NDR) && (BYTE_ORDER == LITTLE_ENDIAN)) || - ((! (variant & WKB_NDR)) && (BYTE_ORDER == BIG_ENDIAN)) ) + if ( ((variant & WKB_NDR) && (getMachineEndian() == NDR)) || + ((! (variant & WKB_NDR)) && (getMachineEndian() == XDR)) ) { return LW_FALSE; } @@ -716,7 +715,7 @@ uint8_t* lwgeom_to_wkb(const LWGEOM *geom, uint8_t variant, size_t *size_out) if ( ! (variant & WKB_NDR || variant & WKB_XDR) || (variant & WKB_NDR && variant & WKB_XDR) ) { - if ( BYTE_ORDER == LITTLE_ENDIAN ) + if ( getMachineEndian() == NDR ) variant = variant | WKB_NDR; else variant = variant | WKB_XDR; diff --git a/liblwgeom/lwutil.c b/liblwgeom/lwutil.c index 7581108e9..a9bcd8a5f 100644 --- a/liblwgeom/lwutil.c +++ b/liblwgeom/lwutil.c @@ -355,8 +355,8 @@ getMachineEndian(void) static int endian_check_int = 1; /* dont modify this!!! */ return *((char *) &endian_check_int); /* 0 = big endian | xdr, - * 1 = little endian | ndr - */ + * 1 = little endian | ndr + */ } -- 2.50.1