From: Ray Strode Date: Mon, 22 Sep 2008 02:44:19 +0000 (-0400) Subject: Add new trigger object X-Git-Tag: 0.6.0~138 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6f329db9ebef5c4d13fb7beff2fb81033b052475;p=thirdparty%2Fplymouth.git Add new trigger object This just calls a closure at a later point in time. It will get used for having the splash plugin perform tasks that will make the daemon defer responding to the client. --- diff --git a/src/libply/Makefile.am b/src/libply/Makefile.am index 1455a063..75f52923 100644 --- a/src/libply/Makefile.am +++ b/src/libply/Makefile.am @@ -16,6 +16,7 @@ libply_HEADERS = \ ply-image.h \ ply-terminal.h \ ply-terminal-session.h \ + ply-trigger.h \ ply-utils.h libply_la_CFLAGS = $(PLYMOUTH_CFLAGS) @@ -34,6 +35,7 @@ libply_la_SOURCES = ply-event-loop.c \ ply-image.c \ ply-terminal.c \ ply-terminal-session.c \ + ply-trigger.c \ ply-utils.c MAINTAINERCLEANFILES = Makefile.in diff --git a/src/libply/ply-trigger.c b/src/libply/ply-trigger.c new file mode 100644 index 00000000..83131a0b --- /dev/null +++ b/src/libply/ply-trigger.c @@ -0,0 +1,78 @@ +/* ply-trigger.c - Calls closure at later time. + * + * Copyright (C) 2008 Red Hat, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + * + * Written by: Ray Strode + */ +#include "config.h" +#include "ply-trigger.h" + +#include +#include +#include + +#include "ply-logger.h" +#include "ply-utils.h" + +struct _ply_trigger +{ + ply_trigger_handler_t handler; + void *user_data; + ply_trigger_t **free_address; +}; + +ply_trigger_t * +ply_trigger_new (ply_trigger_handler_t handler, + void *user_data, + ply_trigger_t **free_address) +{ + ply_trigger_t *trigger; + + trigger = calloc (1, sizeof (ply_trigger_t)); + trigger->handler = handler; + trigger->user_data = user_data; + trigger->free_address = free_address; + + return trigger; +} + +void +ply_trigger_free (ply_trigger_t *trigger) +{ + if (trigger == NULL) + return; + + if (trigger->free_address != NULL) + *trigger->free_address = NULL; + + free (trigger); +} + +void +ply_trigger_pull (ply_trigger_t *trigger, + const void *data) +{ + assert (trigger != NULL); + + if (trigger->handler != NULL) + trigger->handler (trigger->user_data, data, trigger); + + if (trigger->free_address != NULL) + ply_trigger_free (trigger); +} +/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */ diff --git a/src/libply/ply-trigger.h b/src/libply/ply-trigger.h new file mode 100644 index 00000000..d7dc936d --- /dev/null +++ b/src/libply/ply-trigger.h @@ -0,0 +1,47 @@ +/* ply-trigger.h - Calls closure at later time. + * + * Copyright (C) 2008 Red Hat, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + * + * Written By: Ray Strode + */ +#ifndef PLY_TRIGGER_H +#define PLY_TRIGGER_H + +#include +#include +#include + +#include "ply-event-loop.h" + +typedef struct _ply_trigger ply_trigger_t; + +typedef void (* ply_trigger_handler_t) (void *user_data, + const void *trigger_data, + ply_trigger_t *trigger); +#ifndef PLY_HIDE_FUNCTION_DECLARATIONS +ply_trigger_t *ply_trigger_new (ply_trigger_handler_t handler, + void *user_data, + ply_trigger_t **post_pull_free_address); +void ply_trigger_free (ply_trigger_t *trigger); + +void ply_trigger_pull (ply_trigger_t *trigger, + const void *data); +#endif + +#endif /* PLY_TRIGGER_H */ +/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */