diff options
author | Tor Andersson <tor@ghostscript.com> | 2005-05-24 06:19:10 +0200 |
---|---|---|
committer | Tor Andersson <tor@ghostscript.com> | 2005-05-24 06:19:10 +0200 |
commit | 04334c84b883840ec8bbe62d48e57df5f6408ca7 (patch) | |
tree | 339bfa31c4a7b48d4eed8701fd528650a186f2a6 /stream/stm_filter.c | |
parent | d759c948debd9e2dd79eb220b10682681c446e3e (diff) | |
download | mupdf-04334c84b883840ec8bbe62d48e57df5f6408ca7.tar.xz |
tiff and stream cleanups
Diffstat (limited to 'stream/stm_filter.c')
-rw-r--r-- | stream/stm_filter.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/stream/stm_filter.c b/stream/stm_filter.c new file mode 100644 index 00000000..afe4feed --- /dev/null +++ b/stream/stm_filter.c @@ -0,0 +1,51 @@ +#include <fitz.h> + +fz_error fz_kioneedin = { -1, "<ioneedin>", "<process>", "filter.c", 0 }; +fz_error fz_kioneedout = { -1, "<ioneedout>", "<process>", "filter.c", 0 }; +fz_error fz_kiodone = { -1, "<iodone>", "<process>", "filter.c", 0 }; + +fz_error * +fz_process(fz_filter *f, fz_buffer *in, fz_buffer *out) +{ + fz_error *reason; + unsigned char *oldrp; + unsigned char *oldwp; + + assert(!out->eof); + + oldrp = in->rp; + oldwp = out->wp; + + reason = f->process(f, in, out); + + assert(in->rp <= in->wp); + assert(out->wp <= out->ep); + + f->consumed = in->rp > oldrp; + f->produced = out->wp > oldwp; + f->count += out->wp - oldwp; + + if (reason != fz_ioneedin && reason != fz_ioneedout) + out->eof = 1; + + return reason; +} + +fz_filter * +fz_keepfilter(fz_filter *f) +{ + f->refs ++; + return f; +} + +void +fz_dropfilter(fz_filter *f) +{ + if (--f->refs == 0) + { + if (f->drop) + f->drop(f); + fz_free(f); + } +} + |