aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/os/event.c14
-rw-r--r--src/nvim/os/event_defs.h14
-rw-r--r--src/nvim/os/job.c2
-rw-r--r--src/nvim/os/rstream.c2
-rw-r--r--src/nvim/os/signal.c2
5 files changed, 9 insertions, 25 deletions
diff --git a/src/nvim/os/event.c b/src/nvim/os/event.c
index f20d43c6a4..43c02b13b2 100644
--- a/src/nvim/os/event.c
+++ b/src/nvim/os/event.c
@@ -170,19 +170,7 @@ static size_t process_from(klist_t(Event) *queue)
Event event;
while (kl_shift(Event, queue, &event) == 0) {
- switch (event.type) {
- case kEventSignal:
- signal_handle(event);
- break;
- case kEventRStreamData:
- rstream_read_event(event);
- break;
- case kEventJobExit:
- job_exit_event(event);
- break;
- default:
- abort();
- }
+ event.handler(event);
count++;
}
diff --git a/src/nvim/os/event_defs.h b/src/nvim/os/event_defs.h
index dbee3e2ba7..553d4e3125 100644
--- a/src/nvim/os/event_defs.h
+++ b/src/nvim/os/event_defs.h
@@ -7,16 +7,12 @@
#include "nvim/os/rstream_defs.h"
typedef void * EventSource;
+typedef struct event Event;
+typedef void (*event_handler)(Event event);
-typedef enum {
- kEventSignal,
- kEventRStreamData,
- kEventJobExit
-} EventType;
-
-typedef struct {
+struct event {
EventSource source;
- EventType type;
+ event_handler handler;
union {
int signum;
struct {
@@ -25,6 +21,6 @@ typedef struct {
} rstream;
Job *job;
} data;
-} Event;
+};
#endif // NVIM_OS_EVENT_DEFS_H
diff --git a/src/nvim/os/job.c b/src/nvim/os/job.c
index 2ca1023290..d0ac82c047 100644
--- a/src/nvim/os/job.c
+++ b/src/nvim/os/job.c
@@ -489,7 +489,7 @@ static void emit_exit_event(Job *job)
{
Event event = {
.source = job_event_source(job),
- .type = kEventJobExit,
+ .handler = job_exit_event,
.data.job = job
};
event_push(event);
diff --git a/src/nvim/os/rstream.c b/src/nvim/os/rstream.c
index 8f1c30de50..b95098cc52 100644
--- a/src/nvim/os/rstream.c
+++ b/src/nvim/os/rstream.c
@@ -430,7 +430,7 @@ static void emit_read_event(RStream *rstream, bool eof)
{
Event event = {
.source = rstream_event_source(rstream),
- .type = kEventRStreamData,
+ .handler = rstream_read_event,
.data.rstream = {
.ptr = rstream,
.eof = eof
diff --git a/src/nvim/os/signal.c b/src/nvim/os/signal.c
index 2f93cfb08a..b330c7f788 100644
--- a/src/nvim/os/signal.c
+++ b/src/nvim/os/signal.c
@@ -164,7 +164,7 @@ static void signal_cb(uv_signal_t *handle, int signum)
Event event = {
.source = signal_event_source(),
- .type = kEventSignal,
+ .handler = signal_handle,
.data = {
.signum = signum
}