diff options
author | Jared Adams <jaxad0127@gmail.com> | 2011-06-04 12:25:25 -0600 |
---|---|---|
committer | Jared Adams <jaxad0127@gmail.com> | 2011-06-04 12:25:25 -0600 |
commit | e7e99051910a9a8739d8a50225be868e5dc286d6 (patch) | |
tree | a3b3cb91cc67da70be56934ce0904991a5b8b170 /src/net | |
parent | 576dfc355cc06109da0bf07ac65fef7ab484a9cf (diff) | |
download | mana-e7e99051910a9a8739d8a50225be868e5dc286d6.tar.gz mana-e7e99051910a9a8739d8a50225be868e5dc286d6.tar.bz2 mana-e7e99051910a9a8739d8a50225be868e5dc286d6.tar.xz mana-e7e99051910a9a8739d8a50225be868e5dc286d6.zip |
Fix handling of 16- and 32-bit number in tmwAthena netcode
Diffstat (limited to 'src/net')
-rw-r--r-- | src/net/tmwa/messagein.cpp | 19 | ||||
-rw-r--r-- | src/net/tmwa/messageout.cpp | 18 |
2 files changed, 29 insertions, 8 deletions
diff --git a/src/net/tmwa/messagein.cpp b/src/net/tmwa/messagein.cpp index ca2d52ab..38bc14dd 100644 --- a/src/net/tmwa/messagein.cpp +++ b/src/net/tmwa/messagein.cpp @@ -21,6 +21,9 @@ #include "net/tmwa/messagein.h" +#include <SDL.h> +#include <SDL_endian.h> + namespace TmwAthena { MessageIn::MessageIn(const char *data, unsigned int length): @@ -35,7 +38,13 @@ uint16_t MessageIn::readInt16() uint16_t value = 0; if (mPos + 2 <= mLength) { - value = (mData[mPos + 1] << 8) | mData[mPos]; +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + uint16_t swap; + memcpy(&swap, mData + mPos, sizeof(uint16_t)); + value = SDL_Swap16(swap); +#else + memcpy(&value, mData + mPos, sizeof(uint16_t)); +#endif } mPos += 2; return value; @@ -46,7 +55,13 @@ uint32_t MessageIn::readInt32() uint32_t value = 0; if (mPos + 4 <= mLength) { - value = (mData[mPos + 3] << 24) | (mData[mPos + 2] << 16) | (mData[mPos + 1] << 8) | mData[mPos]; +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + uint32_t swap; + memcpy(&swap, mData + mPos, sizeof(uint32_t)); + value = SDL_Swap32(swap); +#else + memcpy(&value, mData + mPos, sizeof(uint32_t)); +#endif } mPos += 4; return value; diff --git a/src/net/tmwa/messageout.cpp b/src/net/tmwa/messageout.cpp index 7c3a3c61..705b9a96 100644 --- a/src/net/tmwa/messageout.cpp +++ b/src/net/tmwa/messageout.cpp @@ -47,18 +47,24 @@ void MessageOut::expand(size_t bytes) void MessageOut::writeInt16(uint16_t value) { expand(2); - mData[mPos] = value; - mData[mPos + 1] = value >> 8; +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + uint16_t swap=SDL_Swap16(value); + memcpy(mData + mPos, &swap, sizeof(uint16_t)); +#else + memcpy(mData + mPos, &value, sizeof(uint16_t)); +#endif mPos += 2; } void MessageOut::writeInt32(uint32_t value) { expand(4); - mData[mPos] = value; - mData[mPos + 1] = value >> 8; - mData[mPos + 2] = value >> 16; - mData[mPos + 3] = value >> 24; +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + uint32_t swap=SDL_Swap32(value); + memcpy(mData + mPos, &swap, sizeof(uint32_t)); +#else + memcpy(mData + mPos, &value, sizeof(uint32_t)); +#endif mPos += 4; } |