-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcallbacks.c
43 lines (29 loc) · 810 Bytes
/
callbacks.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// callbacks.c
//
// Created: 13 FEB 2011
// Author : Daniel M. Klein
//
#include "callbacks.h"
#include "common.h"
#include <stdio.h>
callback_entry *callback_table = NULL ;
void register_named_tag( const char* n, callback_fn f ) {
callback_entry *c = malloc(sizeof(callback_entry));
c->name = malloc(sizeof(char)*(strlen(n)+1));
strcpy(c->name,n) ;
c->f = f;
HASH_ADD_KEYPTR( hh, callback_table, c->name, strlen(c->name), c );
}
void unregister_named_tag( const char* n ) {
callback_entry *c;
HASH_FIND_STR( callback_table, n, c ) ;
HASH_DELETE(hh, callback_table, c) ;
}
int exec_named_tag_callbacks(const Named_Tag* n) {
int rc = TRUE ;
callback_entry *c;
if ( n->name == NULL ) return rc;
HASH_FIND_STR( callback_table, n->name, c );
if (c) rc = c->f(n) ;
return rc ;
}