diff options
author | Juan Cespedes <cespedes@debian.org> | 2009-06-25 19:54:10 +0200 |
---|---|---|
committer | Juan Cespedes <cespedes@debian.org> | 2009-06-25 19:54:10 +0200 |
commit | 40dc6353a443f2eed64fcada3bcf305e56855b15 (patch) | |
tree | 3dfe493fe94bd06148e944d4adf1fae3b1a53b12 /libltrace.c | |
parent | f728123bd75a65a6a1536e198c3c30719e494e71 (diff) | |
download | ltrace-40dc6353a443f2eed64fcada3bcf305e56855b15.tar.gz |
Added support for callbacks to libltrace
Diffstat (limited to 'libltrace.c')
-rw-r--r-- | libltrace.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/libltrace.c b/libltrace.c index 381cfa2..6dd9f44 100644 --- a/libltrace.c +++ b/libltrace.c @@ -123,9 +123,34 @@ ltrace_init(int argc, char **argv) { } } +static int num_ltrace_callbacks = 0; +static void (**ltrace_callbacks)(Event *) = NULL; + +void +ltrace_add_callback(void (*func)(Event *)) { + ltrace_callbacks = realloc(ltrace_callbacks, (num_ltrace_callbacks+1)*sizeof(*ltrace_callbacks)); + ltrace_callbacks[num_ltrace_callbacks++] = func; + + { + int i; + + printf("*** Added callback\n"); + printf("\tThere are %d callbacks:\n", num_ltrace_callbacks); + for (i=0; i<num_ltrace_callbacks; i++) { + printf("\t\t%10p\n", ltrace_callbacks[i]); + } + } +} + void ltrace_main(void) { + int i; + Event * ev; while (1) { - process_event(next_event()); + ev = next_event(); + for (i=0; i<num_ltrace_callbacks; i++) { + ltrace_callbacks[i](ev); + } + process_event(ev); } } |