diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/oldloader.cpp | 2 | ||||
-rw-r--r-- | src/saveload.h | 2 | ||||
-rw-r--r-- | src/stdafx.h | 12 |
3 files changed, 12 insertions, 4 deletions
diff --git a/src/oldloader.cpp b/src/oldloader.cpp index ba5ed4228..58f82cf14 100644 --- a/src/oldloader.cpp +++ b/src/oldloader.cpp @@ -372,7 +372,7 @@ static void FixOldVehicles(void) * - OCL_CHUNK: load an other proc to load a part of the savegame, 'amount' times * - OCL_ASSERT: to check if we are really at the place we expect to be.. because old savegames are too binary to be sure ;) */ -#define OCL_SVAR(type, base, offset) { type, 1, NULL, (uint)offsetof(base, offset), NULL } +#define OCL_SVAR(type, base, offset) { type, 1, NULL, (uint)cpp_offsetof(base, offset), NULL } #define OCL_VAR(type, amount, pointer) { type, amount, pointer, 0, NULL } #define OCL_END() { OC_END, 0, NULL, 0, NULL } #define OCL_NULL(amount) { OC_NULL, amount, NULL, 0, NULL } diff --git a/src/saveload.h b/src/saveload.h index 7f7a190c6..b6abc4334 100644 --- a/src/saveload.h +++ b/src/saveload.h @@ -183,7 +183,7 @@ typedef struct SaveLoad { typedef SaveLoad SaveLoadGlobVarList; /* Simple variables, references (pointers) and arrays */ -#define SLE_GENERAL(cmd, base, variable, type, length, from, to) {cmd, type, length, from, to, (void*)offsetof(base, variable)} +#define SLE_GENERAL(cmd, base, variable, type, length, from, to) {cmd, type, length, from, to, (void*)cpp_offsetof(base, variable)} #define SLE_CONDVAR(base, variable, type, from, to) SLE_GENERAL(SL_VAR, base, variable, type, 0, from, to) #define SLE_CONDREF(base, variable, type, from, to) SLE_GENERAL(SL_REF, base, variable, type, 0, from, to) #define SLE_CONDARR(base, variable, type, length, from, to) SLE_GENERAL(SL_ARR, base, variable, type, length, from, to) diff --git a/src/stdafx.h b/src/stdafx.h index c854e4a61..6c6a21ec7 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -290,10 +290,18 @@ assert_compile(sizeof(uint8) == 1); #define lengthof(x) (sizeof(x)/sizeof(x[0])) #define endof(x) (&x[lengthof(x)]) #define lastof(x) (&x[lengthof(x) - 1]) -#ifndef offsetof -# define offsetof(s,m) (size_t)&(((s *)0)->m) + +#ifdef offsetof +# undef offsetof #endif +#ifndef __cplusplus +# define offsetof(s,m) (size_t)&(((s *)0)->m) +#else /* __cplusplus */ +# define cpp_offsetof(s,m) (((size_t)&reinterpret_cast<const volatile char&>((((s*)(char*)8)->m))) - 8) +# define offsetof(s,m) cpp_offsetof(s, m) +#endif /* __cplusplus */ + // take care of some name clashes on macos #if defined(__APPLE__) |