Kill global close_filters().
[paraslash.git] / filter.h
index 15bfaf8cdb0c2533c463fe8272d21e5528b80dbd..6529028e1a05a1c8b1b989cab8a2ccca00940e0d 100644 (file)
--- a/filter.h
+++ b/filter.h
@@ -32,6 +32,9 @@ struct filter_node {
        struct list_head callbacks;
        /** A pointer to the configuration of this instance. */
        void *conf;
+       struct btr_node *btrn;
+       struct task task;
+       size_t min_iqs;
 };
 
 /** Describes one running instance of a chain of filters */
@@ -155,19 +158,6 @@ struct filter {
         * of \a fn suitably. The open function is assumed to succeed.
         */
        void (*open)(struct filter_node *fn);
-       /**
-        * Convert (filter) the given data.
-        *
-        * Pointer to the converting function of the filter. It should convert the
-        * given input buffer \a inbuf which is of length \a len to the previously
-        * reserved output buffer of \a fn. On success, it must return the number of
-        * bytes it consumed from \a inbuf. On errors, a negative number indicating the
-        * kind of the error must be returned.
-        *
-        * A zero return value just means that nothing was converted (probably because
-        * the input buffer was too small). This is not interpreted as an error.
-        */
-       ssize_t (*convert)(char *inbuf, size_t len, struct filter_node *fn);
        /**
         * Close one instance of this filter.
         *
@@ -188,16 +178,26 @@ struct filter {
         * argv. On failure, a negative paraslash error code must be returned.
         */
        int (*parse_config)(int argc, char **argv, void **config);
+       void (*free_config)(void *conf);
 
        /** The help texts for this filter. */
        struct ggo_help help;
+       void (*pre_select)(struct sched *s, struct task *t);
+       /**
+        * Convert (filter) the given data.
+        *
+        * Pointer to the converting function of the filter. It should convert as
+        * input data as possible. On errors, the post_select function is supposed
+        * to set t->error to a (negative) error code.
+        */
+       void (*post_select)(struct sched *s, struct task *t);
+       btr_command_handler execute;
 };
 
-void close_filters(struct filter_chain *fc);
 void filter_init(void);
 int check_filter_arg(char *filter_arg, void **conf);
-void filter_post_select(__a_unused struct sched *s, struct task *t);
 void print_filter_helps(int detailed);
+void generic_filter_pre_select(struct sched *s, struct task *t);
 
 static inline void write_int16_host_endian(char *buf, int val)
 {