Remove most call to memcpy in preperation for Big Endian support
Document what pointers are being skipped
Align save and load code (easier to verify that both are correct)
While no storm functions are called from these source files
it is determined that they included storm in the original
source files as made visible by the inclusion of infinity
in the data segments of the respective source files.
ref: diasurgical/devilution#1695.
Copy framesize_t (4 bytes) to nextsize (8 bytes) then shift 32 bits to zero out
the most significant 32 bits.
Use of #ifdef __LP64__ suggested by @brynet.
memcpy((char *)&packeta[1] - packeta->dwSpaceLeft, packet, dwSize);
Source/msg.cpp does this calculation, which will be wrong if any padding is
added. To get this to work correctly, pack the structures, as suggested by
@AJenbo.
Also, define TMEGAPKT_SIZE because pNext can be 4 or 8 bytes.
The following build error was observed when compiling with Clang:
In file included from Source/appfat.cpp:1:
In file included from ./Source/diablo.h:5:
In file included from ./Source/../types.h:52:
In file included from ./SourceS/miniwin.h:19:
In file included from /usr/lib/clang/8.0.1/include/x86intrin.h:29:
In file included from /usr/lib/clang/8.0.1/include/immintrin.h:28:
/usr/lib/clang/8.0.1/include/mmintrin.h:81:40: error: cannot initialize a parameter of type
'__attribute__((__vector_size__(2 * sizeof(int)))) int' (vector of 2 'int' values) with an rvalue of type
'__v2si' (aka 'int')
return __builtin_ia32_vec_ext_v2si((__v2si)__m, 0);
^~~~~~~~~~~
Clang version:
$ clang -v
clang version 8.0.1 (tags/RELEASE_801/final)
First I tried to replace the x86intrin.h include with:
static inline unsigned int _rotl(unsigned int value, int shift)
{
return (value << shift) | (value >> (32 - shift));
}
static inline unsigned int _rotr(unsigned int value, int shift)
{
return (value >> shift) | (value << (32 - shift));
}
But that resulted in an error stating that _rotl and _rotr were
predeclared in Clang:
./SourceS/miniwin.h:20:28: error: definition of builtin function '_rotl'
static inline unsigned int _rotl(unsigned int value, int shift)
Thus, we simply declare but don't define these functions when
using Clang.