aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFelipe Oliveira Carvalho <felipekde@gmail.com>2014-04-06 00:48:21 -0300
committerThiago de Arruda <tpadilha84@gmail.com>2014-04-07 00:22:01 -0300
commitc3cea30cb7952c44c3452d9e7926fe50397d43ae (patch)
tree96c7b3024d0be700905a94a866b51f4ed2b51bfb /src
parent967fb1aca6ea9c3d3046ccd6b9fcf0f88d6999ac (diff)
downloadrneovim-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.c2
-rw-r--r--src/os/event.h4
-rw-r--r--src/os/signal.c9
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);
}