X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=filter_chain.c;h=4c1f94bcb890526548e1702209625add432232e1;hp=d59ff7094fc37075b97f914b925d3ac776439591;hb=c3db896887ec2c79d0fea9c29637709f5f844820;hpb=1129a59e6ebcdbad2d46d09a84eb580f42c00aa6 diff --git a/filter_chain.c b/filter_chain.c index d59ff709..4c1f94bc 100644 --- a/filter_chain.c +++ b/filter_chain.c @@ -18,7 +18,6 @@ /** \file filter_chain.c common helper functions for filter input/output */ -#include "gcc-compat.h" #include "para.h" #include "list.h" #include "filter.h" @@ -124,7 +123,7 @@ again: int ret; if (*loaded && fn->loaded < fn->bufsize) { size_t old_fn_loaded = fn->loaded; - PARA_DEBUG_LOG("fc %p loaded: %d, calling %s convert\n", fci, *loaded, fn->filter->name); + PARA_DEBUG_LOG("fc %p loaded: %zd, calling %s convert\n", fci, *loaded, fn->filter->name); ret = fn->filter->convert(ib, *loaded, fn); if (ret < 0) { if (!fci->error) @@ -135,7 +134,7 @@ again: *loaded -= ret; conv += ret; if (*loaded && ret) { - PARA_DEBUG_LOG("moving %d bytes in input buffer for %s filter\n", + PARA_DEBUG_LOG("moving %zd bytes in input buffer for %s filter\n", *loaded, fn->filter->name); memmove(ib, ib + ret, *loaded); } @@ -187,32 +186,27 @@ static int parse_filter_args(int filter_num, char *options, void **conf) { struct filter *f = &filters[filter_num]; int i, argc = 2; - char *dummy_args[] = {"", "", NULL}; char **argv; // PARA_DEBUG_LOG("%s, options: %s, parser: %p\n", f->name, // options? options : "(none)", f->parse_config); if (!f->parse_config) - return options? -E_BAD_FILTER_OPTIONS : filter_num; - if (options) { -// PARA_DEBUG_LOG("options: %s\n", options); - argc = split_args(options, &argv, ' '); + return strlen(options)? -E_BAD_FILTER_OPTIONS : filter_num; +// PARA_DEBUG_LOG("options: %s\n", options); + argc = split_args(options, &argv, " \t"); // PARA_DEBUG_LOG("argc = %d, argv[0]: %s\n", argc, argv[0]); - for (i = argc; i >= 0; i--) - argv[i + 1] = argv[i]; - argc += 2; - *conf = f->parse_config(argc, argv); - } else { - /* is it OK to have no options? */ - *conf = f->parse_config(2, dummy_args); - } + for (i = argc - 1; i >= 0; i--) + argv[i + 1] = argv[i]; + argv[0] = para_strdup(f->name); + argc += 1; + *conf = f->parse_config(argc, argv); return *conf? filter_num : -E_BAD_FILTER_OPTIONS; } /** * check the filter command line options * - * \param fa the command line options (values separated by colons) + * \param fa the command line options * \param conf points to the filter configuration upon successful return * * Check if \a fa starts with a the name of a supported filter, followed by @@ -246,7 +240,8 @@ int check_filter_arg(char *fa, void **conf) continue; if (c && !filters[j].parse_config) return -E_BAD_FILTER_OPTIONS; - return parse_filter_args(j, c? fa + len + 1 : NULL, conf); + return parse_filter_args(j, c? fa + len + 1 : + fa + strlen(fa), conf); } return -E_UNSUPPORTED_FILTER; }