diff --git a/src/callback.c b/src/callback.c index 3813c6456..f37f14ae7 100644 --- a/src/callback.c +++ b/src/callback.c @@ -1,3 +1,5 @@ +#include +#include #include "callback.h" #include #include @@ -5,7 +7,7 @@ static struct reg { struct reg * next; CALLBACK cb; - const char *name; + char *name; } *registry; CALLBACK create_callback(void (*cbv)(va_list va)) { @@ -15,6 +17,12 @@ CALLBACK create_callback(void (*cbv)(va_list va)) { } void reset_callbacks(void) { + while(registry) { + struct reg *r = registry; + registry = r->next; + free(r->name); + free(r); + } registry = 0; } @@ -22,7 +30,7 @@ CALLBACK register_callback(const char *name, void (*cbv)(va_list va)) { struct reg * r = (struct reg *)malloc(sizeof(struct reg)); r->next = registry; - r->name = name; + r->name = _strdup(name); r->cb.cbv = cbv; registry = r; return r->cb;