acdcd5dbba
- Fix alignment issues on strict alignment architectures. - Don't unnecessarily byte-swap on big endian hosts. from Brad
98 lines
3.3 KiB
Plaintext
98 lines
3.3 KiB
Plaintext
$OpenBSD: patch-SDL_net_h,v 1.1 2012/06/01 15:58:00 ajacoutot Exp $
|
|
|
|
- Fix alignment issues on strict alignment architectures.
|
|
- Don't unnecessarily byte-swap on big endian hosts.
|
|
|
|
|
|
--- SDL_net.h.orig Fri Jun 1 02:19:40 2012
|
|
+++ SDL_net.h Fri Jun 1 02:31:05 2012
|
|
@@ -354,7 +354,7 @@ extern no_parse_DECLSPEC char * SDLCALL SDLNet_GetErro
|
|
/* Inline macro functions to read/write network data */
|
|
|
|
/* Warning, some systems have data access alignment restrictions */
|
|
-#if defined(sparc) || defined(mips)
|
|
+#if defined(__STRICT_ALIGNMENT)
|
|
#define SDL_DATA_ALIGNED 1
|
|
#endif
|
|
#ifndef SDL_DATA_ALIGNED
|
|
@@ -366,7 +366,6 @@ extern no_parse_DECLSPEC char * SDLCALL SDLNet_GetErro
|
|
#define SDLNet_Write16(value, areap) \
|
|
(*SDL_reinterpret_cast(Uint16 *, areap) = SDL_SwapBE16(value))
|
|
#else
|
|
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
|
|
#define SDLNet_Write16(value, areap) \
|
|
do \
|
|
{ \
|
|
@@ -374,15 +373,6 @@ do \
|
|
area[0] = (value >> 8) & 0xFF; \
|
|
area[1] = value & 0xFF; \
|
|
} while ( 0 )
|
|
-#else
|
|
-#define SDLNet_Write16(value, areap) \
|
|
-do \
|
|
-{ \
|
|
- Uint8 *area = SDL_reinterpret_cast(Uint8 *, areap); \
|
|
- area[1] = (value >> 8) & 0xFF; \
|
|
- area[0] = value & 0xFF; \
|
|
-} while ( 0 )
|
|
-#endif
|
|
#endif /* !SDL_DATA_ALIGNED */
|
|
|
|
/* Write a 32 bit value to network packet buffer */
|
|
@@ -390,7 +380,6 @@ do \
|
|
#define SDLNet_Write32(value, areap) \
|
|
*SDL_reinterpret_cast(Uint32 *, areap) = SDL_SwapBE32(value);
|
|
#else
|
|
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
|
|
#define SDLNet_Write32(value, areap) \
|
|
do \
|
|
{ \
|
|
@@ -400,17 +389,6 @@ do \
|
|
area[2] = (value >> 8) & 0xFF; \
|
|
area[3] = value & 0xFF; \
|
|
} while ( 0 )
|
|
-#else
|
|
-#define SDLNet_Write32(value, areap) \
|
|
-do \
|
|
-{ \
|
|
- Uint8 *area = SDL_reinterpret_cast(Uint8 *, areap); \
|
|
- area[3] = (value >> 24) & 0xFF; \
|
|
- area[2] = (value >> 16) & 0xFF; \
|
|
- area[1] = (value >> 8) & 0xFF; \
|
|
- area[0] = value & 0xFF; \
|
|
-} while ( 0 )
|
|
-#endif
|
|
#endif /* !SDL_DATA_ALIGNED */
|
|
|
|
/* Read a 16 bit value from network packet buffer */
|
|
@@ -418,13 +396,8 @@ do \
|
|
#define SDLNet_Read16(areap) \
|
|
(SDL_SwapBE16(*SDL_reinterpret_cast(Uint16 *, areap)))
|
|
#else
|
|
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
|
|
#define SDLNet_Read16(areap) \
|
|
(((SDL_reinterpret_cast(Uint8 *, areap))[0] << 8) | (SDL_reinterpret_cast(Uint8 *, areap))[1] << 0)
|
|
-#else
|
|
-#define SDLNet_Read16(areap) \
|
|
- (((SDL_reinterpret_cast(Uint8 *, areap))[1] << 8) | (SDL_reinterpret_cast(Uint8 *, areap))[0] << 0)
|
|
-#endif
|
|
#endif /* !SDL_DATA_ALIGNED */
|
|
|
|
/* Read a 32 bit value from network packet buffer */
|
|
@@ -432,15 +405,9 @@ do \
|
|
#define SDLNet_Read32(areap) \
|
|
(SDL_SwapBE32(*SDL_reinterpret_cast(Uint32 *, areap)))
|
|
#else
|
|
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
|
|
#define SDLNet_Read32(areap) \
|
|
(((SDL_reinterpret_cast(Uint8 *, areap))[0] << 24) | ((SDL_reinterpret_cast(Uint8 *, areap))[1] << 16) | \
|
|
((SDL_reinterpret_cast(Uint8 *, areap))[2] << 8) | (SDL_reinterpret_cast(Uint8 *, areap))[3] << 0)
|
|
-#else
|
|
-#define SDLNet_Read32(areap) \
|
|
- (((SDL_reinterpret_cast(Uint8 *, areap))[3] << 24) | ((SDL_reinterpret_cast(Uint8 *, areap))[2] << 16) | \
|
|
- ((SDL_reinterpret_cast(Uint8 *, areap))[1] << 8) | (SDL_reinterpret_cast(Uint8 *, areap))[0] << 0)
|
|
-#endif
|
|
#endif /* !SDL_DATA_ALIGNED */
|
|
|
|
/* Ends C function definitions when using C++ */
|