Use macro to generate tryDereference
This commit is contained in:
parent
324231b00f
commit
11e9135f06
26
mem.c
26
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)) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user