diff --git a/src/callback.c b/src/callback.c index a760a8a843ac23d835fa7c6419f2285f10eaf461..80dac895506fb9507ae94a40704d42ba51d1c256 100644 --- a/src/callback.c +++ b/src/callback.c @@ -33,7 +33,7 @@ static struct callback *get_free_callback() struct callback_block *tmp2; tmp2=ALLOC_STRUCT(callback_block); - for(e=0;e<sizeof(CALLBACK_CHUNK);e++) + for(e=0;e<(int)sizeof(CALLBACK_CHUNK);e++) { tmp2->callbacks[e].next=tmp; tmp=tmp2->callbacks+e; @@ -43,21 +43,20 @@ static struct callback *get_free_callback() return tmp; } -void call_callback(struct callback **ptr) +void call_callback(struct callback **ptr, void *arg) { struct callback *l; while(l=*ptr) { - if(l->call) l->call(l,l->arg); + if(l->call) l->call(l,l->arg, arg); if(!l->call) { *ptr=l->next; - free((char *)l); - }else{ - ptr=& l->next; l->next=free_callbacks; free_callbacks=l; + }else{ + ptr=& l->next; } } } @@ -92,7 +91,7 @@ void free_callback(struct callback **ptr) while(l=*ptr) { if(l->arg && l->free_func) - l->free_func(l, l->arg); + l->free_func(l, l->arg, 0); *ptr=l->next; l->next=free_callbacks; free_callbacks=l; diff --git a/src/callback.h b/src/callback.h index 6ba2257f7081b7ddfacd91f76b504203e4941def..0836801e7266c43d57f28c94f501e59fcf0a3c8d 100644 --- a/src/callback.h +++ b/src/callback.h @@ -10,12 +10,12 @@ struct callback; -typedef void (*callback_func)(struct callback *, void *); +typedef void (*callback_func)(struct callback *, void *,void *); /* Prototypes begin here */ struct callback; struct callback_block; -void call_callback(struct callback **ptr); +void call_callback(struct callback **ptr, void *arg); struct callback *add_to_callback(struct callback **ptr, callback_func call, void *arg, diff --git a/src/machine.h.in b/src/machine.h.in index f2fd1293272c758d0f8474903da1d81a42f12d69..70b4987c1edef088cb121b7d62a6dda4d391bdb1 100644 --- a/src/machine.h.in +++ b/src/machine.h.in @@ -161,6 +161,9 @@ /* Define if you have getenv. */ #undef HAVE_GETENV +/* Define if you have gettimeofday. */ +#undef HAVE_GETTIMEOFDAY + /* Does your unix have a putenv function? */ #undef HAVE_PUTENV diff --git a/src/main.c b/src/main.c index a3e17682021b4371aceddc2b0624ae799e3c3a4a..46c3a9608f36b12fb4abe53744acae009943d0c2 100644 --- a/src/main.c +++ b/src/main.c @@ -157,7 +157,7 @@ void main(int argc, char **argv, char **env) init_modules_efuns(); master(); - call_callback(& post_master_callbacks); + call_callback(& post_master_callbacks, 0); free_callback(& post_master_callbacks); init_modules_programs();