Lines Matching defs:stack
2 * services/modstack.c - stack of modules
39 * This file contains functions to help maintain a stack of modules.
92 modstack_init(struct module_stack* stack)
94 stack->num = 0;
95 stack->mod = NULL;
99 modstack_free(struct module_stack* stack)
101 if(!stack)
103 stack->num = 0;
104 free(stack->mod);
105 stack->mod = NULL;
109 modstack_config(struct module_stack* stack, const char* module_conf)
113 stack->num = count_modules(module_conf);
114 if(stack->num == 0) {
118 if(stack->num > MAX_MODULE) {
120 stack->num, MAX_MODULE);
123 stack->mod = (struct module_func_block**)calloc((size_t)
124 stack->num, sizeof(struct module_func_block*));
125 if(!stack->mod) {
129 for(i=0; i<stack->num; i++) {
130 stack->mod[i] = module_factory(&module_conf);
131 if(!stack->mod[i]) {
236 modstack_call_startup(struct module_stack* stack, const char* module_conf,
240 if(stack->num != 0)
243 if(!modstack_config(stack, module_conf)) {
246 for(i=0; i<stack->num; i++) {
247 if(stack->mod[i]->startup == NULL)
250 i, stack->mod[i]->name);
251 fptr_ok(fptr_whitelist_mod_startup(stack->mod[i]->startup));
252 if(!(*stack->mod[i]->startup)(env, i)) {
254 stack->mod[i]->name);
262 modstack_call_init(struct module_stack* stack, const char* module_conf,
267 for(i=0; i<stack->num; i++) {
270 if(strncmp(stack->mod[i]->name, module_conf,
271 strlen(stack->mod[i]->name))) {
272 if(stack->mod[i]->startup || stack->mod[i]->destartup) {
279 module_conf += strlen(stack->mod[i]->name);
282 modstack_free(stack);
283 if(!modstack_config(stack, module_conf)) {
288 for(i=0; i<stack->num; i++) {
290 i, stack->mod[i]->name);
291 fptr_ok(fptr_whitelist_mod_init(stack->mod[i]->init));
292 if(!(*stack->mod[i]->init)(env, i)) {
294 stack->mod[i]->name);
302 modstack_call_deinit(struct module_stack* stack, struct module_env* env)
305 for(i=0; i<stack->num; i++) {
306 fptr_ok(fptr_whitelist_mod_deinit(stack->mod[i]->deinit));
307 (*stack->mod[i]->deinit)(env, i);
312 modstack_call_destartup(struct module_stack* stack, struct module_env* env)
315 for(i=0; i<stack->num; i++) {
316 if(stack->mod[i]->destartup == NULL)
318 fptr_ok(fptr_whitelist_mod_destartup(stack->mod[i]->destartup));
319 (*stack->mod[i]->destartup)(env, i);
324 modstack_find(struct module_stack* stack, const char* name)
327 for(i=0; i<stack->num; i++) {
328 if(strcmp(stack->mod[i]->name, name) == 0)