aboutsummaryrefslogtreecommitdiffstats
path: root/debian/postinst (unfollow)
AgeCommit message (Expand)AuthorFilesLines
2005-01-11[lcd4linux @ 2005-01-11 10:25:26 by reinelt]reinelt1-1/+1
2005-01-11[lcd4linux @ 2005-01-11 10:19:33 by reinelt]reinelt2-10/+42
2005-01-09[lcd4linux @ 2005-01-09 10:57:25 by reinelt]reinelt1-0/+111
2005-01-09[lcd4linux @ 2005-01-09 10:53:22 by reinelt]reinelt7-31/+36
2005-01-06[lcd4linux @ 2005-01-06 16:54:53 by reinelt]reinelt3-40/+51
2004-12-22[lcd4linux @ 2004-12-22 20:24:00 by reinelt]reinelt4-57/+88
2004-11-30[lcd4linux @ 2004-11-30 05:01:25 by reinelt]reinelt1-7/+11
2004-11-29[lcd4linux @ 2004-11-29 04:42:06 by reinelt]reinelt5-13/+28
2004-11-28[lcd4linux @ 2004-11-28 15:50:24 by reinelt]reinelt5-217/+265
2004-10-17[lcd4linux @ 2004-10-17 09:24:31 by reinelt]reinelt3-22/+155
2004-10-02[lcd4linux @ 2004-10-02 09:31:55 by reinelt]reinelt4-68/+192
2004-09-24[lcd4linux @ 2004-09-24 21:40:52 by reinelt]reinelt12-19/+656
2004-09-19[lcd4linux @ 2004-09-19 09:31:19 by reinelt]reinelt3-31/+81
2004-09-18[lcd4linux @ 2004-09-18 15:58:57 by reinelt]reinelt4-69/+128
2004-09-18[lcd4linux @ 2004-09-18 10:57:29 by reinelt]reinelt1-50/+79
2004-09-18[lcd4linux @ 2004-09-18 09:48:29 by reinelt]reinelt4-109/+231
2004-09-18[lcd4linux @ 2004-09-18 08:22:59 by reinelt]reinelt4-13/+88
2004-08-30[lcd4linux @ 2004-08-30 12:48:52 by rjoco77]rjoco771-19/+24
2004-08-29[lcd4linux @ 2004-08-29 20:07:55 by reinelt]reinelt1-9/+62
2004-08-29[lcd4linux @ 2004-08-29 13:03:40 by reinelt]reinelt9-55/+709
2004-07-14[lcd4linux @ 2004-07-14 04:44:44 by reinelt]reinelt2-4/+19
2004-06-29[lcd4linux @ 2004-06-29 04:49:30 by reinelt]reinelt1-7/+47
2004-06-26[lcd4linux @ 2004-06-26 12:04:59 by reinelt]reinelt69-139/+413
2004-06-26[lcd4linux @ 2004-06-26 09:27:20 by reinelt]reinelt71-1842/+2274
2004-06-26[lcd4linux @ 2004-06-26 06:12:14 by reinelt]reinelt7-111/+562
2004-06-24[lcd4linux @ 2004-06-24 20:18:08 by nicowallmeier]nicowallmeier1-2/+5
2004-06-20[lcd4linux @ 2004-06-20 10:12:27 by reinelt]reinelt1-0/+110
2004-06-20[lcd4linux @ 2004-06-20 10:09:52 by reinelt]reinelt51-377/+569
2004-06-19[lcd4linux @ 2004-06-19 08:20:19 by reinelt]reinelt2-7/+17
2004-06-17[lcd4linux @ 2004-06-17 10:58:57 by reinelt]reinelt3-76/+84
2004-06-17[lcd4linux @ 2004-06-17 06:23:39 by reinelt]reinelt19-403/+633
2004-06-13[lcd4linux @ 2004-06-13 01:12:52 by reinelt]reinelt3-18/+34
2004-06-09[lcd4linux @ 2004-06-09 06:40:29 by reinelt]reinelt3-11/+35
2004-06-08[lcd4linux @ 2004-06-08 21:46:38 by reinelt]reinelt5-31/+131
2004-06-08[lcd4linux @ 2004-06-08 12:35:24 by reinelt]reinelt6-882/+474
2004-06-07[lcd4linux @ 2004-06-07 07:02:13 by reinelt]reinelt1-0/+33
2004-06-07[lcd4linux @ 2004-06-07 06:56:55 by reinelt]reinelt5-7/+149
2004-06-06[lcd4linux @ 2004-06-06 06:51:59 by reinelt]reinelt16-52/+135
2004-06-05[lcd4linux @ 2004-06-05 14:56:48 by reinelt]reinelt3-24/+37
2004-06-05[lcd4linux @ 2004-06-05 06:41:39 by reinelt]reinelt11-42/+87
2004-06-05[lcd4linux @ 2004-06-05 06:13:11 by reinelt]reinelt9-69/+327
2004-06-02[lcd4linux @ 2004-06-02 10:09:22 by reinelt]reinelt4-180/+183
2004-06-02[lcd4linux @ 2004-06-02 09:41:19 by reinelt]reinelt18-114/+211
2004-06-02[lcd4linux @ 2004-06-02 05:56:25 by reinelt]reinelt1-2/+6
2004-06-02[lcd4linux @ 2004-06-02 05:35:55 by reinelt]reinelt1-0/+20
2004-06-02[lcd4linux @ 2004-06-02 05:27:59 by reinelt]reinelt26-0/+2405
2004-06-02[lcd4linux @ 2004-06-02 05:14:16 by reinelt]reinelt2-17/+31
2004-06-01[lcd4linux @ 2004-06-01 06:45:28 by reinelt]reinelt18-71/+241
2004-06-01[lcd4linux @ 2004-06-01 06:04:25 by reinelt]reinelt2-25/+25
2004-05-31[lcd4linux @ 2004-05-31 21:23:16 by reinelt]reinelt1-37/+49
* int event_process(const struct timespec *delay); * process the event list * * void event_exit(); * releases all events * */ #include "config.h" #include <stdlib.h> #include <stdio.h> #include <string.h> #include <poll.h> #include "debug.h" #include "cfg.h" #include "event.h" #ifdef WITH_DMALLOC #include <dmalloc.h> #endif typedef struct { void (*callback) (event_flags_t flags, void *data); void *data; int fd; int read; int write; int active; int fds_id; } event_t; //our set of FDs static event_t *events = NULL; static int event_count = 0; static void free_events(void); int event_add(void (*callback) (event_flags_t flags, void *data), void *data, const int fd, const int read, const int write, const int active) { event_count++; events = realloc(events, sizeof(event_t) * event_count); int i = event_count - 1; events[i].callback = callback; events[i].data = data; events[i].fd = fd; events[i].read = read; events[i].write = write; events[i].active = active; events[i].fds_id = -1; return 0; } int event_process(const struct timespec *timeout) { int i, j; struct pollfd *fds = malloc(sizeof(struct pollfd) * event_count); for (i = 0, j = 0; i < event_count; i++) { events[i].fds_id = -1; if (events[i].active) { events[i].fds_id = j; fds[j].events = 0; fds[j].fd = events[i].fd; if (events[i].read) { fds[j].events |= POLLIN; } if (events[i].write) { fds[j].events |= POLLOUT; } j++; } } #if (__GLIBC__ >= 2 && __GLIBC_MINOR__ >= 4) int ready = ppoll(fds, j, timeout, NULL); #else int ready = poll(fds, j, timeout->tv_sec * 1000 + timeout->tv_nsec / 1000000); #endif if (ready > 0) { //search the file descriptors, call all relavant callbacks for (i = 0, j = 0; i < event_count; i++) { if (events[i].fds_id != j) { continue; } if (fds[j].revents) { int flags = 0; if (fds[j].revents & POLLIN) { flags |= EVENT_READ; } if (fds[j].revents & POLLOUT) { flags |= EVENT_WRITE; } if (fds[j].revents & POLLHUP) { flags |= EVENT_HUP; } if (fds[j].revents & POLLERR) { flags |= EVENT_ERR; } events[i].callback(flags, events[i].data); } j++; } } free(fds); return 0; } int event_del(const int fd) { int i; for (i = 0; i < event_count; i++) { if (events[i].fd == fd) { events[i] = events[event_count - 1]; break; } } event_count--; events = realloc(events, sizeof(event_t) * event_count); return 0; } int event_modify(const int fd, const int read, const int write, const int active) { int i; for (i = 0; i < event_count; i++) { if (events[i].fd == fd) { events[i].read = read; events[i].write = write; events[i].active = active; break; } } event_count--; events = realloc(events, sizeof(event_t) * event_count); return 0; } static void free_events(void) { if (events != NULL) { free(events); } event_count = 0; events = NULL; } void event_exit(void) { free_events(); } /* * Named events are the user facing side of the event subsystem * */ //we rely on "=" working for copying these structs (no pointers except the callers) typedef struct { void (*callback) (void *data); void *data; } event_callback_t; typedef struct { char *name; event_callback_t *c; int callback_count; } named_event_list_t; static named_event_list_t *ev_names = NULL; static int ev_count = 0; int named_event_add(char *event, void (*callback) (void *data), void *data) { if (event == NULL || strlen(event) == 0) { return 1; } if (callback == NULL) { return 2; } int i; for (i = 0; i < ev_count; i++) { if (0 == strcmp(event, ev_names[i].name)) { break; } } if (i >= ev_count) { //create the entry ev_count++; ev_names = realloc(ev_names, sizeof(named_event_list_t) * ev_count); ev_names[i].name = strdup(event); ev_names[i].callback_count = 0; ev_names[i].c = NULL; } int j = ev_names[i].callback_count; ev_names[i].callback_count++; ev_names[i].c = realloc(ev_names[i].c, sizeof(event_callback_t) * ev_names[i].callback_count); ev_names[i].c[j].callback = callback; ev_names[i].c[j].data = data; return 0; } int named_event_del(char *event, void (*callback) (void *data), void *data) { int i, j; for (i = 0; i < ev_count; i++) { if (0 == strcmp(event, ev_names[i].name)) { break; } } if (i >= ev_count) { return 1; //nothing removed } for (j = 0; j < ev_names[i].callback_count; j++) { if (ev_names[i].c[j].callback == callback && ev_names[i].c[j].data == data) { ev_names[i].callback_count--; ev_names[i].c[j] = ev_names[i].c[ev_names[i].callback_count]; ev_names[i].c = realloc(ev_names[i].c, sizeof(event_callback_t) * ev_names[i].callback_count); if (ev_names[i].callback_count == 0) { //drop this event free(ev_names[i].name); ev_count--; ev_names[i] = ev_names[ev_count]; ev_names = realloc(ev_names, sizeof(named_event_list_t) * ev_count); } return 0; } } return 2; } int named_event_trigger(char *event) { int i, j; for (i = 0; i < ev_count; i++) { if (0 == strcmp(event, ev_names[i].name)) { for (j = 0; j < ev_names[i].callback_count; j++) { ev_names[i].c[j].callback(ev_names[i].c[j].data); } return 0; } } return 1; }