- ret = check_filter_arg(fa, &fn->conf);
- if (ret < 0) {
- free(fn);
- goto out_cleanup;
- }
- fn->filter_num = ret;
- f = filters + fn->filter_num;
- sprintf(fn->task.status, "%s", f->name);
- PARA_DEBUG_LOG("filter #%d: %s\n", i, f->name);
- fn->btrn = btr_new_node(f->name, parent, f->execute, fn);
- fn->task.pre_select = f->pre_select;
- fn->task.post_select = f->post_select;
- f->open(fn);
- register_task(&fn->task);
+ fn->filter_num = filter_setup(fa, &fn->conf, &filter_lpr);
+ name = filter_name(fn->filter_num);
+ fn->lpr = filter_lpr;
+ PARA_DEBUG_LOG("filter #%d: %s\n", i, name);
+ f = filter_get(fn->filter_num);
+ fn->btrn = btr_new_node(&(struct btr_node_description)
+ EMBRACE(.name = name, .parent = parent,
+ .handler = f->execute, .context = fn));
+ ti.name = name;
+ ti.pre_select = f->pre_select;
+ ti.post_select = f->post_select;
+ ti.context = fn;
+ if (f->open)
+ f->open(fn);
+ fn->task = task_register(&ti, &s);