diff --git a/mem.c b/mem.c index 92cf526..196014c 100644 --- a/mem.c +++ b/mem.c @@ -16,19 +16,21 @@ void segfault_handler(int signal_num) { exit(signal_num); } } -int tryDereference(uint8_t* pointer, uint8_t* output) { - uintptr_t val; - if (setjmp(env_buffer) == 0) { - enable_handler = 1; - *output = *pointer; - enable_handler = 0; - return 1; +#define IMPL_TRY_DEREF(type) \ + int tryDereference(type* pointer, type* output) { \ + type val;\ + if(setjmp(env_buffer) == 0) {\ + enable_handler = 1;\ + *output = *pointer;\ + enable_handler = 0;\ + return 1;\ + } else {\ + enable_handler = 0;\ + return 0;\ + }\ } - else { - enable_handler = 0; - return 0; - } -} +IMPL_TRY_DEREF(uint8_t) + void printMem(uint8_t* location) { uint8_t value; if(tryDereference(location, &value)) {