Mercurial > pub > dyncall > dyncall
comparison dyncallback/dyncall_callback_sparc32.c @ 202:030fbb70aa1b
- changed allocwx code:
* to introduce a call allowing to switch the written page to be executable (e.g. using mprotect)
* changed mmap based code so page is always W^X
author | Tassilo Philipp |
---|---|
date | Mon, 20 Mar 2017 23:12:58 +0100 |
parents | bbefb8b8e74c |
children | f5577f6bf97a |
comparison
equal
deleted
inserted
replaced
201:136409adbdd1 | 202:030fbb70aa1b |
---|---|
47 | 47 |
48 DCCallback* dcbNewCallback(const char* signature, DCCallbackHandler* handler, void* userdata) | 48 DCCallback* dcbNewCallback(const char* signature, DCCallbackHandler* handler, void* userdata) |
49 { | 49 { |
50 DCCallback* pcb; | 50 DCCallback* pcb; |
51 int err = dcAllocWX(sizeof(DCCallback), (void**) &pcb); | 51 int err = dcAllocWX(sizeof(DCCallback), (void**) &pcb); |
52 if (err != 0) return 0; | 52 if(err) |
53 return NULL; | |
53 | 54 |
54 dcbInitThunk(&pcb->thunk, dcCallbackThunkEntry); | 55 dcbInitThunk(&pcb->thunk, dcCallbackThunkEntry); |
55 dcbInitCallback(pcb, signature, handler, userdata); | 56 dcbInitCallback(pcb, signature, handler, userdata); |
57 | |
58 err = dcInitExecWX(pcb, sizeof(DCCallback)); | |
59 if(err) { | |
60 dcFreeWX(pcb, sizeof(DCCallback)); | |
61 return NULL; | |
62 } | |
56 | 63 |
57 return pcb; | 64 return pcb; |
58 } | 65 } |
59 | 66 |
60 void dcbFreeCallback(DCCallback* pcb) | 67 void dcbFreeCallback(DCCallback* pcb) |