Allow SameBoy to compile on 4-byte-bools platforms

This commit is contained in:
Lior Halphon 2019-11-20 22:40:03 +02:00
parent 31609319de
commit bd9ac204c2
2 changed files with 9 additions and 6 deletions

View File

@ -18,6 +18,13 @@
#define GB_rewind_push(...) #define GB_rewind_push(...)
#endif #endif
static inline uint32_t state_magic(void)
{
if (sizeof(bool) == 1) return 'SAME';
return 'S4ME';
}
void GB_attributed_logv(GB_gameboy_t *gb, GB_log_attributes attributes, const char *fmt, va_list args) void GB_attributed_logv(GB_gameboy_t *gb, GB_log_attributes attributes, const char *fmt, va_list args)
{ {
char *string = NULL; char *string = NULL;
@ -660,7 +667,7 @@ void GB_disconnect_serial(GB_gameboy_t *gb)
bool GB_is_inited(GB_gameboy_t *gb) bool GB_is_inited(GB_gameboy_t *gb)
{ {
return gb->magic == 'SAME'; return gb->magic == state_magic();
} }
bool GB_is_cgb(GB_gameboy_t *gb) bool GB_is_cgb(GB_gameboy_t *gb)
@ -929,7 +936,7 @@ void GB_reset(GB_gameboy_t *gb)
gb->nontrivial_jump_state = NULL; gb->nontrivial_jump_state = NULL;
} }
gb->magic = (uintptr_t)'SAME'; gb->magic = state_magic();
} }
void GB_switch_model_and_reset(GB_gameboy_t *gb, GB_model_t model) void GB_switch_model_and_reset(GB_gameboy_t *gb, GB_model_t model)

View File

@ -278,10 +278,6 @@ typedef struct {
This struct is not packed, but dumped sections exclusively use types that have the same alignment in both 32 and 64 This struct is not packed, but dumped sections exclusively use types that have the same alignment in both 32 and 64
bit platforms. */ bit platforms. */
/* We make sure bool is 1 for cross-platform save state compatibility. */
/* Todo: We might want to typedef our own bool if this prevents SameBoy from working on specific platforms. */
_Static_assert(sizeof(bool) == 1, "sizeof(bool) != 1");
#ifdef GB_INTERNAL #ifdef GB_INTERNAL
struct GB_gameboy_s { struct GB_gameboy_s {
#else #else