Ejemplo n.º 1
0
 def signal(sig, f):
     sig = sig.value
     import signal
     if isinstance(f, CWrapValue):
         f = f.value
     def sig_handler(sig, stack_frame):
         return f(sig)
     if isinstance(f, ctypes._CFuncPtr):
         if _ctype_ptr_get_value(f) == 0:  # place-holder for SIG_DFL
             sig_handler = signal.SIG_DFL
         elif _ctype_ptr_get_value(f) == 1:  # place-holder for SIG_IGN
             sig_handler = signal.SIG_IGN
     old_action = signal.signal(sig, sig_handler)
     # TODO: need to use helpers.makeFuncPtr for old_action.
     # And maybe handle SIG_DFL/SIG_IGN cases?
     return 0  # place-holder for SIG_DFL
Ejemplo n.º 2
0
 def handle_stdlib_h(self, state):
     state.macros["EXIT_SUCCESS"] = Macro(rightside="0")
     state.macros["EXIT_FAILURE"] = Macro(rightside="1")
     state.funcs["abort"] = CWrapValue(
         lambda: self.interpreter._abort(),
         returnType=CVoidType,
         name="abort"
     )
     state.funcs["exit"] = CWrapValue(
         lambda s: self.interpreter._exit(s.value),  # int
         returnType=CVoidType,
         name="exit"
     )
     state.funcs["malloc"] = CWrapValue(
         lambda s: self.interpreter._malloc(s.value),  # size_t
         returnType=ctypes.c_void_p,
         name="malloc"
     )
     state.funcs["realloc"] = CWrapValue(
         lambda (p, s): self.interpreter._realloc(_ctype_ptr_get_value(p), s.value),  # void*, size_t
         returnType=ctypes.c_void_p,
         name="realloc"
     )
     state.funcs["free"] = CWrapValue(
         lambda p: self.interpreter._free(_ctype_ptr_get_value(p)),  # void*
         returnType=CVoidType,
         name="free"
     )
     wrapCFunc(state, "strtoul", restype=ctypes.c_ulong, argtypes=(ctypes.c_char_p, ctypes.POINTER(ctypes.c_char_p), ctypes.c_int))
     state.funcs["atoi"] = CWrapValue(
         lambda x: ctypes.c_int(int(ctypes.cast(x, ctypes.c_char_p).value)),
         returnType=ctypes.c_int,
         name="atoi"
     )
     state.funcs["getenv"] = CWrapValue(
         lambda x: _fixCArg(ctypes.c_char_p(os.getenv(ctypes.cast(x, ctypes.c_char_p).value))),
         returnType=CPointerType(ctypes.c_byte),
         name="getenv"
     )