diff options
author | Felipe Oliveira Carvalho <felipekde@gmail.com> | 2014-04-06 00:48:21 -0300 |
---|---|---|
committer | Thiago de Arruda <tpadilha84@gmail.com> | 2014-04-07 00:22:01 -0300 |
commit | c3cea30cb7952c44c3452d9e7926fe50397d43ae (patch) | |
tree | 96c7b3024d0be700905a94a866b51f4ed2b51bfb /src | |
parent | 967fb1aca6ea9c3d3046ccd6b9fcf0f88d6999ac (diff) | |
download | rneovim-c3cea30cb7952c44c3452d9e7926fe50397d43ae.tar.gz rneovim-c3cea30cb7952c44c3452d9e7926fe50397d43ae.tar.bz2 rneovim-c3cea30cb7952c44c3452d9e7926fe50397d43ae.zip |
Turn Event into a tagged union
If we ever need arbitrary data or more than very few bytes on `Events` we just
have to add a `void *` field in the `data` union.
Diffstat (limited to 'src')
-rw-r--r-- | src/os/event.c | 2 | ||||
-rw-r--r-- | src/os/event.h | 4 | ||||
-rw-r--r-- | src/os/signal.c | 9 |
3 files changed, 8 insertions, 7 deletions
diff --git a/src/os/event.c b/src/os/event.c index dd8d6d9bdd..a4ebdb15ff 100644 --- a/src/os/event.c +++ b/src/os/event.c @@ -12,7 +12,7 @@ #include "memory.h" #include "misc2.h" -// event.data will be cleaned up after the event is processed +// event will be cleaned up after it gets processed #define _destroy_event(x) // do nothing KLIST_INIT(Event, Event, _destroy_event) diff --git a/src/os/event.h b/src/os/event.h index 2470add1cf..ba84d8ffae 100644 --- a/src/os/event.h +++ b/src/os/event.h @@ -10,7 +10,9 @@ typedef enum { typedef struct { EventType type; - void *data; + union { + int signum; + } data; } Event; void event_init(void); diff --git a/src/os/signal.c b/src/os/signal.c index 503269208d..dc404a6e99 100644 --- a/src/os/signal.c +++ b/src/os/signal.c @@ -69,9 +69,7 @@ void signal_accept_deadly() void signal_handle(Event event) { - int signum = *(int *)event.data; - - free(event.data); + int signum = event.data.signum; switch (signum) { case SIGINT: @@ -157,8 +155,9 @@ static void signal_cb(uv_signal_t *handle, int signum) Event event = { .type = kEventSignal, - .data = xmalloc(sizeof(int)) + .data = { + .signum = signum + } }; - *(int *)event.data = signum; event_push(event); } |