/** \file filter_chain.c common helper functions for filter input/output */
-#include "gcc-compat.h"
#include "para.h"
#include "list.h"
#include "filter.h"
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)
*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);
}
{
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
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;
}