Fix for Issue 37: Endian swap routines are incorrect
This commit is contained in:
parent
1753297fd5
commit
139409c645
@ -538,45 +538,48 @@ inline void swapByte(unsigned char* a, unsigned char* b)
|
|||||||
|
|
||||||
inline void swapEndian(unsigned short* v)
|
inline void swapEndian(unsigned short* v)
|
||||||
{
|
{
|
||||||
unsigned char* x = (unsigned char*)&v;
|
unsigned char* x = (unsigned char*)v;
|
||||||
swapByte(x+0, x+1);
|
swapByte(x+0, x+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void swapEndian(short* v)
|
inline void swapEndian(short* v)
|
||||||
{
|
{
|
||||||
unsigned char* x = (unsigned char*)&v;
|
unsigned char* x = (unsigned char*)v;
|
||||||
swapByte(x+0, x+1);
|
swapByte(x+0, x+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void swapEndian(unsigned int* v)
|
inline void swapEndian(unsigned int* v)
|
||||||
{
|
{
|
||||||
unsigned char* x = (unsigned char*)&v;
|
unsigned char* x = (unsigned char*)v;
|
||||||
swapByte(x+0, x+3); swapByte(x+1, x+2);
|
swapByte(x+0, x+3); swapByte(x+1, x+2);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void swapEndian(int* v)
|
inline void swapEndian(int* v)
|
||||||
{
|
{
|
||||||
unsigned char* x = (unsigned char*)&v;
|
unsigned char* x = (unsigned char*)v;
|
||||||
swapByte(x+0, x+3); swapByte(x+1, x+2);
|
swapByte(x+0, x+3); swapByte(x+1, x+2);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void swapEndian(float* v)
|
inline void swapEndian(float* v)
|
||||||
{
|
{
|
||||||
unsigned char* x = (unsigned char*)&v;
|
unsigned char* x = (unsigned char*)v;
|
||||||
swapByte(x+0, x+3); swapByte(x+1, x+2);
|
swapByte(x+0, x+3); swapByte(x+1, x+2);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool dtNavMeshHeaderSwapEndian(unsigned char* data, const int dataSize)
|
bool dtNavMeshHeaderSwapEndian(unsigned char* data, const int dataSize)
|
||||||
{
|
{
|
||||||
dtMeshHeader* header = (dtMeshHeader*)data;
|
dtMeshHeader* header = (dtMeshHeader*)data;
|
||||||
int magic = header->magic;
|
|
||||||
int version = header->version;
|
int swappedMagic = DT_NAVMESH_MAGIC;
|
||||||
swapEndian(&magic);
|
int swappedVersion = DT_NAVMESH_VERSION;
|
||||||
swapEndian(&version);
|
swapEndian(&swappedMagic);
|
||||||
if (magic != DT_NAVMESH_MAGIC)
|
swapEndian(&swappedVersion);
|
||||||
return false;
|
|
||||||
if (version != DT_NAVMESH_VERSION)
|
if ((header->magic != DT_NAVMESH_MAGIC || header->version != DT_NAVMESH_VERSION) &&
|
||||||
|
(header->magic != swappedMagic || header->version != swappedVersion))
|
||||||
|
{
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
swapEndian(&header->magic);
|
swapEndian(&header->magic);
|
||||||
swapEndian(&header->version);
|
swapEndian(&header->version);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user