X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=filter.c;h=d4a2423904ca96f87f1ec11600f1c67e2b101ae1;hp=d5dac6758cc1a2e2041a97bf8cba4b2abe75e90a;hb=HEAD;hpb=bd28ec9a64884d70917c4fdea1a3a70c91758f83 diff --git a/filter.c b/filter.c index d5dac675..722cb16f 100644 --- a/filter.c +++ b/filter.c @@ -1,8 +1,4 @@ -/* - * Copyright (C) 2005 Andre Noll - * - * Licensed under the GPL v2. For licencing details see COPYING. - */ +/* Copyright (C) 2005 Andre Noll , see file COPYING. */ /** \file filter.c The stand-alone filter program. */ @@ -13,6 +9,7 @@ #include "filter_cmd.lsg.h" #include "para.h" #include "list.h" +#include "lsu.h" #include "sched.h" #include "buffer_tree.h" #include "filter.h" @@ -34,7 +31,7 @@ static struct lls_parse_result *lpr; /* command line options */ #define OPT_UINT32_VAL(_name) (lls_uint32_val(0, OPT_RESULT(_name))) /** The list of all status items used by para_{server,audiod,gui}. */ -const char *status_item_list[] = {STATUS_ITEM_ARRAY}; +const char *status_item_list[] = {STATUS_ITEMS}; /** * Dummy version which only contains NULL pointers. @@ -75,50 +72,15 @@ static void handle_help_flag(void) static int parse_config(void) { - char *home, *cf; /* config file */ - struct stat statbuf; int ret; version_handle_flag("filter", OPT_GIVEN(VERSION)); handle_help_flag(); - home = para_homedir(); - cf = make_message("%s/.paraslash/filter.conf", home); - free(home); - if (!stat(cf, &statbuf)) { - void *map; - size_t sz; - int cf_argc; - char **cf_argv, *errctx; - struct lls_parse_result *cf_lpr, *merged_lpr; - - ret = mmap_full_file(cf, O_RDONLY, &map, &sz, NULL); - if (ret != -E_EMPTY) { - if (ret < 0) - return ret; - ret = lls(lls_convert_config(map, sz, NULL, &cf_argv, - &errctx)); - para_munmap(map, sz); - if (ret < 0) { - PARA_ERROR_LOG("syntax error in %s\n", cf); - return ret; - } - cf_argc = ret; - ret = lls(lls_parse(cf_argc, cf_argv, CMD_PTR, &cf_lpr, - &errctx)); - lls_free_argv(cf_argv); - if (ret < 0) { - PARA_ERROR_LOG("parse error in %s\n", cf); - return ret; - } - ret = lls(lls_merge(lpr, cf_lpr, CMD_PTR, &merged_lpr, &errctx)); - lls_free_parse_result(cf_lpr, CMD_PTR); - if (ret < 0) - return ret; - lls_free_parse_result(lpr, CMD_PTR); - lpr = merged_lpr; - loglevel = OPT_UINT32_VAL(LOGLEVEL); - } - } + ret = lsu_merge_config_file_options(NULL, "filter.conf", + &lpr, CMD_PTR, filter_suite, 0 /* default flags */); + if (ret < 0) + return ret; + loglevel = OPT_UINT32_VAL(LOGLEVEL); if (!OPT_GIVEN(FILTER)) { print_filter_list(); exit(EXIT_SUCCESS); @@ -151,7 +113,6 @@ int main(int argc, char *argv[]) ret = lls(lls_parse(argc, argv, CMD_PTR, &lpr, &errctx)); if (ret < 0) goto out; - loglevel = OPT_UINT32_VAL(LOGLEVEL); ret = parse_config(); if (ret < 0) goto free_lpr; @@ -159,14 +120,14 @@ int main(int argc, char *argv[]) EMBRACE(.name = "stdin")); stdin_task_register(sit, &s); - fns = para_malloc(OPT_GIVEN(FILTER) * sizeof(*fns)); + fns = arr_alloc(OPT_GIVEN(FILTER), sizeof(*fns)); for (i = 0, parent = sit->btrn; i < OPT_GIVEN(FILTER); i++) { const char *fa = lls_string_val(i, OPT_RESULT(FILTER)); const char *name; struct filter_node *fn; struct task_info ti; - fn = fns[i] = para_calloc(sizeof(*fn)); + fn = fns[i] = zalloc(sizeof(*fn)); fn->filter_num = filter_setup(fa, &fn->conf, &filter_lpr); name = filter_name(fn->filter_num); fn->lpr = filter_lpr; @@ -176,8 +137,8 @@ int main(int argc, char *argv[]) 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.pre_monitor = f->pre_monitor; + ti.post_monitor = f->post_monitor; ti.context = fn; if (f->open) f->open(fn); @@ -188,8 +149,7 @@ int main(int argc, char *argv[]) EMBRACE(.name = "stdout", .parent = parent)); stdout_task_register(sot, &s); - s.default_timeout.tv_sec = 1; - s.default_timeout.tv_usec = 0; + s.default_timeout = 1000; btr_log_tree(sit->btrn, LL_INFO); ret = schedule(&s); sched_shutdown(&s);