API change -- Remove first ctx argument and add event mask to callback

There really does not exist a good reason for us sending a `uev_ctx_t *`
pointer as the first argument to event callbacks.  If the callback needs
to reference the context, it can find the ctx pointer in the `uev_t *w`.

This patch removes the first argument from all callbacks and also fixes
a slight bug in that the event loop never returned the actual event that
triggered the callback!

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
Joachim Nilsson committed 2015-06-09 13:10:20 +02:00
1 parent 9e7f6865fc
commit 1f9558059a
6 files changed
+30 -24

No files matched your search

+1 -1
View File
@@ -40,7 +40,7 @@ struct js_event {
uint8_t number; /* axis/button number */
} e;
static void joystick_cb(uev_ctx_t *UNUSED(ctx), uev_t *w, void *UNUSED(arg), int UNUSED(events))
static void joystick_cb(uev_t *w, void *UNUSED(arg), int UNUSED(events))
{
if (read (w->fd, &e, sizeof(e)) < 0)
errx(errno, "Failed reading joystick event");
+10 -6
View File
@@ -69,13 +69,13 @@ static int callback(arg_t *arg, int event, void *foo)
return 42;
}
static void sigsegv_cb(uev_ctx_t *UNUSED(ctx), uev_t *UNUSED(w), void *UNUSED(arg), int UNUSED(events))
static void sigsegv_cb(uev_t *UNUSED(w), void *UNUSED(arg), int UNUSED(events))
{
warnx("PID %d caused segfault.", getpid());
exit(-1);
}
static void sigchld_cb(uev_ctx_t *UNUSED(ctx), uev_t *UNUSED(w), void *UNUSED(arg), int UNUSED(events))
static void sigchld_cb(uev_t *UNUSED(w), void *UNUSED(arg), int UNUSED(events))
{
pid_t pid = waitpid(-1, NULL, WNOHANG);
@@ -83,7 +83,7 @@ static void sigchld_cb(uev_ctx_t *UNUSED(ctx), uev_t *UNUSED(w), void *UNUSED(ar
warnx("PID %d exited, bye.", pid);
}
static void work_cb(uev_ctx_t *UNUSED(ctx), uev_t *UNUSED(w), void *arg, int UNUSED(events))
static void work_cb(uev_t *UNUSED(w), void *arg, int UNUSED(events))
{
int status = 0;
pid_t pid;
@@ -102,15 +102,17 @@ static void work_cb(uev_ctx_t *UNUSED(ctx), uev_t *UNUSED(w), void *arg, int UNU
if (WIFEXITED(status))
printf("Child exited normally => %d\n", WEXITSTATUS(status));
else if (WCOREDUMP(status))
printf("Child crashed!\n");
printf("Child crashed! %s\n", DO_SEGFAULT
? "As expected, everything is OK."
: "This should not happen!");
else
printf("Child did not exit normally!\n");
}
static void exit_cb(uev_ctx_t *ctx, uev_t *UNUSED(w), void *UNUSED(arg), int UNUSED(events))
static void exit_cb(uev_t *w, void *UNUSED(arg), int UNUSED(events))
{
printf("Process deadline reached, exiting!\n");
uev_exit(ctx);
uev_exit(w->ctx);
}
int main(void)
@@ -120,6 +122,8 @@ int main(void)
/* Initialize libuEv */
uev_init(&ctx);
/* Setup callbacks */
uev_signal_init(&ctx, &sigsegv_watcher, sigsegv_cb, NULL, SIGSEGV);
uev_signal_init(&ctx, &sigchld_watcher, sigchld_cb, NULL, SIGCHLD);
uev_timer_init(&ctx, &timeout_watcher, work_cb, &arg, 400, 0);
+8 -8
View File
@@ -40,33 +40,33 @@ static int in, out;
static int period = 0;
static uev_t *watchdog;
static void lifetime_cb(uev_ctx_t *ctx, uev_t UNUSED(*w), void *arg, int UNUSED(events))
static void lifetime_cb(uev_t *w, void *arg, int UNUSED(events))
{
fprintf(stderr, "\nLifetime exceeded, program completed successfully! (arg:%p)\n", arg);
uev_exit(ctx);
uev_exit(w->ctx);
}
/* The pipe watchdog, if it triggers we haven't received data in time. */
static void timeout_cb(uev_ctx_t *ctx, uev_t *UNUSED(w), void *arg, int UNUSED(events))
static void timeout_cb(uev_t *w, void *arg, int UNUSED(events))
{
watchdog = NULL;
fprintf(stderr, "\nTimeout exceeded %p\n", arg);
// uev_timer_stop(w); <-- No need to stop timers with period=0 :)
uev_exit(ctx);
uev_exit(w->ctx);
}
static void periodic_task(uev_ctx_t UNUSED(*ctx), uev_t UNUSED(*w), void UNUSED(*arg), int UNUSED(events))
static void periodic_task(uev_t UNUSED(*w), void UNUSED(*arg), int UNUSED(events))
{
fprintf(stderr, "|");
}
static void signal_cb(uev_ctx_t *UNUSED(ctx), uev_t *w, void *UNUSED(arg), int UNUSED(events))
static void signal_cb(uev_t *w, void *UNUSED(arg), int UNUSED(events))
{
fprintf(stderr, w->signo == SIGINT ? "^Cv" : "^\v");
}
static void pipe_read_cb(uev_ctx_t *UNUSED(ctx), uev_t UNUSED(*w), void UNUSED(*arg), int UNUSED(events))
static void pipe_read_cb(uev_t UNUSED(*w), void UNUSED(*arg), int UNUSED(events))
{
int cnt;
char msg[50];
@@ -80,7 +80,7 @@ static void pipe_read_cb(uev_ctx_t *UNUSED(ctx), uev_t UNUSED(*w), void UNUSED(*
fprintf(stderr, "%.*s.%d ", cnt, msg, cnt);
}
static void pipe_write_cb(uev_ctx_t UNUSED(*ctx), uev_t *w, void *arg, int UNUSED(events))
static void pipe_write_cb(uev_t *w, void *arg, int UNUSED(events))
{
my_t *my = arg;
char *msg = "TESTING";