X-Git-Url: http://git.squeep.com/?p=dcpu16;a=blobdiff_plain;f=hw_keyboard.c;fp=hw_keyboard.c;h=90c30b3809590f9882a91da23f67a0af17d476c8;hp=d5c90b3faf4b2af6f5a1519894c02107d8b7ea8d;hb=9e40f875436d85767042714823f47fdf136ba9b0;hpb=ce296c260b229bb5c2e866db7842f3a46ea8c4b7 diff --git a/hw_keyboard.c b/hw_keyboard.c index d5c90b3..90c30b3 100644 --- a/hw_keyboard.c +++ b/hw_keyboard.c @@ -12,6 +12,12 @@ #define BUF_SZ 32 +#ifdef WANT_VARIADIC_VOIDP_CAST +#define VOIDP(__x__) ((void *)(__x__)) +#else +#define VOIDP(__x__) (__x__) +#endif + static dcpu16_hw_signal_t keyboard_reset_; static dcpu16_hw_signal_t keyboard_cycle_; static dcpu16_hw_signal_t keyboard_hwi_; @@ -83,10 +89,17 @@ void keyboard_rfbevent_(rfbBool down, rfbKeySym key, rfbClientPtr cl) { keysym_rfbtodcpu(key, &dcpu_key); - fprintf(stderr, "%s: down:%u key:0x%04x dcpu_key:0x%04x\n", __func__, - down, key, dcpu_key); + fprintf(stderr, "%s: down:%u key:0x%04x dcpu_key:0x%04x\n", + __func__, + down, + key, + dcpu_key); - fprintf(stderr, "%s: hw:%p name:%s vm:%p\n", __func__, hw, hw->name_, hw->vm); + fprintf(stderr, "%s: hw:%p name:%s vm:%p\n", + __func__, + VOIDP(hw), + hw->name_, + VOIDP(hw->vm)); keyboard->keys_pressed[dcpu_key] = (down ? 1 : 0); if (down) { @@ -192,13 +205,16 @@ struct dcpu16_hw *keyboard_new(struct dcpu16 *vm) { void keyboard_del(struct dcpu16_hw **hw) { if (hw) { - free(((struct keyboard_ *)((*hw)->data))->buf); - ((struct keyboard_ *)((*hw)->data))->buf = NULL; - - free((*hw)->data); - (*hw)->data = NULL; - - free(*hw); - *hw = NULL; + if (*hw) { + if ((*hw)->data) { + free(((struct keyboard_ *)((*hw)->data))->buf); + ((struct keyboard_ *)((*hw)->data))->buf = NULL; + + free((*hw)->data); + (*hw)->data = NULL; + } + free(*hw); + *hw = NULL; + } } }