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);
|
exit(signal_num);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int tryDereference(uint8_t* pointer, uint8_t* output) {
|
#define IMPL_TRY_DEREF(type) \
|
||||||
uintptr_t val;
|
int tryDereference(type* pointer, type* output) { \
|
||||||
if (setjmp(env_buffer) == 0) {
|
type val;\
|
||||||
enable_handler = 1;
|
if(setjmp(env_buffer) == 0) {\
|
||||||
*output = *pointer;
|
enable_handler = 1;\
|
||||||
enable_handler = 0;
|
*output = *pointer;\
|
||||||
return 1;
|
enable_handler = 0;\
|
||||||
}
|
return 1;\
|
||||||
else {
|
} else {\
|
||||||
enable_handler = 0;
|
enable_handler = 0;\
|
||||||
return 0;
|
return 0;\
|
||||||
}
|
}\
|
||||||
}
|
}
|
||||||
|
IMPL_TRY_DEREF(uint8_t)
|
||||||
|
|
||||||
void printMem(uint8_t* location) {
|
void printMem(uint8_t* location) {
|
||||||
uint8_t value;
|
uint8_t value;
|
||||||
if(tryDereference(location, &value)) {
|
if(tryDereference(location, &value)) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user