Merge branch 'master' into next
[paraslash.git] / filter_common.c
index 2fa774c0b57e614ec2e7493661d0e589e5c44d58..7c71ff39243a7a63f7026c11726418377790c87e 100644 (file)
@@ -6,6 +6,7 @@
 
 /** \file filter_common.c Common helper functions for filter input/output. */
 
+#include <regex.h>
 #include <sys/types.h>
 #include <dirent.h>
 
@@ -43,7 +44,7 @@ void filter_init(void)
  */
 static void close_filter_callback(struct filter_callback *fcb)
 {
-       PARA_NOTICE_LOG("closing filter_callback %p, data: %p\n", fcb, fcb->data);
+       PARA_NOTICE_LOG("closing filter_callback %p\n", fcb);
        list_del(&fcb->node);
        fcb->close(fcb);
 }
@@ -195,15 +196,18 @@ static int parse_filter_args(int filter_num, char *options, void **conf)
        if (!f->parse_config)
                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]);
+       argc = create_argv(options, " \t", &argv);
+       if (argc < 0)
+               return -E_BAD_FILTER_OPTIONS;
+       PARA_DEBUG_LOG("argc = %d, argv[0]: %s\n", argc, argv[0]);
        for (i = argc - 1; i >= 0; i--)
                argv[i + 1] = argv[i];
        argv[0] = para_strdup(f->name);
-       argc += 1;
+       argc++;
        ret = f->parse_config(argc, argv, conf);
-       free(argv[0]);
-       free(argv);
+       free(argv[argc - 1]);
+       argv[argc - 1] = NULL;
+       free_argv(argv);
        return ret < 0? ret : filter_num;
 }