#include #include typedef struct { int value; } foo_t; typedef void (*foo_callback_t)(foo_t *foo); typedef struct _callback_node_s callback_node_t; struct _callback_node_s { foo_callback_t callback; callback_node_t *next; }; static callback_node_t *callback_list = NULL; void add_foo_callback(foo_callback_t callback) { callback_node_t *node = malloc(sizeof(callback_node_t)); node->callback = callback; node->next = callback_list; callback_list = node; } void notify_once() { foo_t foo; callback_node_t *node; foo.value = 10; for (node = callback_list; node != NULL; node = node->next) node->callback(&foo); } void notify_n_times(int n) { int i; for (i = 0; i < n; ++i) notify_once(); }