-/*
- * Copyright (C) 2005 Andre Noll <maan@tuebingen.mpg.de>
- *
- * Licensed under the GPL v2. For licencing details see COPYING.
- */
+/* Copyright (C) 2005 Andre Noll <maan@tuebingen.mpg.de>, see file COPYING. */
/** \file filter.c The stand-alone filter program. */
#include "filter_cmd.lsg.h"
#include "para.h"
#include "list.h"
+#include "lsu.h"
#include "sched.h"
#include "buffer_tree.h"
#include "filter.h"
#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.
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);
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;
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;
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);
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);