summaryrefslogtreecommitdiff
path: root/filter/dctc.h
diff options
context:
space:
mode:
authorTor Andersson <tor@ghostscript.com>2004-09-27 02:15:04 +0200
committerTor Andersson <tor@ghostscript.com>2004-09-27 02:15:04 +0200
commit6ddde92a3a45e970b05770633dc6a337d5d013c5 (patch)
tree1dec4612d7469839478e72d16d30a0da5755243c /filter/dctc.h
downloadmupdf-6ddde92a3a45e970b05770633dc6a337d5d013c5.tar.xz
Initial import
Diffstat (limited to 'filter/dctc.h')
-rw-r--r--filter/dctc.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/filter/dctc.h b/filter/dctc.h
new file mode 100644
index 00000000..8aa6aeb7
--- /dev/null
+++ b/filter/dctc.h
@@ -0,0 +1,39 @@
+/*
+ * Extend libjpegs error handler to use setjmp/longjmp
+ */
+
+#include <jpeglib.h>
+
+#include <setjmp.h>
+
+struct myerrmgr
+{
+ struct jpeg_error_mgr super;
+ jmp_buf jb;
+ char msg[JMSG_LENGTH_MAX];
+};
+
+static void myerrexit(j_common_ptr cinfo)
+{
+ struct myerrmgr *err = (struct myerrmgr *)cinfo->err;
+ char msgbuf[JMSG_LENGTH_MAX];
+ err->super.format_message(cinfo, msgbuf);
+ strlcpy(err->msg, msgbuf, sizeof err->msg);
+ longjmp(err->jb, 1);
+}
+
+static void myoutmess(j_common_ptr cinfo)
+{
+ struct myerrmgr *err = (struct myerrmgr *)cinfo->err;
+ char msgbuf[JMSG_LENGTH_MAX];
+ err->super.format_message(cinfo, msgbuf);
+ fprintf(stderr, "ioerror: dct: %s", msgbuf);
+}
+
+static void myiniterr(struct myerrmgr *err)
+{
+ jpeg_std_error(&err->super);
+ err->super.error_exit = myerrexit;
+ err->super.output_message = myoutmess;
+}
+