Simplify the scheduling code.
[paraslash.git] / filter_chain.c
index b39874448668466c6b351871b56b681a25ee58e5..975539291b2f08c3f97ec0b894531759d5613ac6 100644 (file)
@@ -1,11 +1,14 @@
 /*
 /*
- * Copyright (C) 2005-2007 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2005-2008 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
 
 /** \file filter_chain.c common helper functions for filter input/output */
 
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
 
 /** \file filter_chain.c common helper functions for filter input/output */
 
+#include <sys/types.h>
+#include <dirent.h>
+
 #include "para.h"
 #include "list.h"
 #include "sched.h"
 #include "para.h"
 #include "list.h"
 #include "sched.h"
@@ -106,15 +109,16 @@ static void call_callbacks(struct filter_node *fn, char *inbuf, size_t inlen,
  */
 void filter_pre_select(__a_unused struct sched *s, struct task *t)
 {
  */
 void filter_pre_select(__a_unused struct sched *s, struct task *t)
 {
-       struct filter_chain *fc = t->private_data;
+       struct filter_chain *fc = container_of(t, struct filter_chain, task);
        struct filter_node *fn;
        char *ib;
        size_t *loaded;
        int conv, conv_total = 0;
 
        struct filter_node *fn;
        char *ib;
        size_t *loaded;
        int conv, conv_total = 0;
 
-       t->ret = -E_FC_EOF;
-       if (fc->output_eof && *fc->output_eof)
-               goto err_out;
+       if (fc->output_error && *fc->output_error < 0) {
+               t->error =  *fc->output_error;
+               return;
+       }
 again:
        ib = fc->inbuf;
        loaded = fc->in_loaded;
 again:
        ib = fc->inbuf;
        loaded = fc->in_loaded;
@@ -124,10 +128,10 @@ again:
                        size_t size, old_fn_loaded = fn->loaded;
 //                     PARA_DEBUG_LOG("fc %p loaded: %zd, calling %s convert\n",
 //                             fc, *loaded, fn->filter->name);
                        size_t size, old_fn_loaded = fn->loaded;
 //                     PARA_DEBUG_LOG("fc %p loaded: %zd, calling %s convert\n",
 //                             fc, *loaded, fn->filter->name);
-                       t->ret = fn->filter->convert(ib, *loaded, fn);
-                       if (t->ret < 0)
-                               goto err_out;
-                       size = t->ret;
+                       t->error = fn->filter->convert(ib, *loaded, fn);
+                       if (t->error < 0)
+                               return;
+                       size = t->error;
                        call_callbacks(fn, ib, size, fn->buf + old_fn_loaded,
                                fn->loaded - old_fn_loaded);
                        *loaded -= size;
                        call_callbacks(fn, ib, size, fn->buf + old_fn_loaded,
                                fn->loaded - old_fn_loaded);
                        *loaded -= size;
@@ -149,16 +153,13 @@ again:
 //             fc->eof, *fc->out_loaded, conv, conv_total);
        if (conv)
                goto again;
 //             fc->eof, *fc->out_loaded, conv, conv_total);
        if (conv)
                goto again;
-       t->ret = 1;
-       if (!*fc->input_eof)
+       if (!*fc->input_error)
                return;
        if (*fc->out_loaded)
                return;
        if (*fc->in_loaded && conv_total)
                return;
                return;
        if (*fc->out_loaded)
                return;
        if (*fc->in_loaded && conv_total)
                return;
-       t->ret = -E_FC_EOF;
-err_out:
-       fc->eof = 1;
+       t->error = -E_FC_EOF;
 }
 
 /**
 }
 
 /**