blob: 3d320eeffbbb2276f3e47abb31e178ef0c60c1b3 [file] [log] [blame]
Bo Xufdc00a72014-10-28 23:03:33 -07001/*
2 * Copyright (c) 1988-1997 Sam Leffler
3 * Copyright (c) 1991-1997 Silicon Graphics, Inc.
4 *
Lei Zhanga30e6562023-02-01 17:57:40 +00005 * Permission to use, copy, modify, distribute, and sell this software and
Bo Xufdc00a72014-10-28 23:03:33 -07006 * its documentation for any purpose is hereby granted without fee, provided
7 * that (i) the above copyright notices and this permission notice appear in
8 * all copies of the software and related documentation, and (ii) the names of
9 * Sam Leffler and Silicon Graphics may not be used in any advertising or
10 * publicity relating to the software without the specific, prior written
11 * permission of Sam Leffler and Silicon Graphics.
Lei Zhanga30e6562023-02-01 17:57:40 +000012 *
13 * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
14 * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
15 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
16 *
Bo Xufdc00a72014-10-28 23:03:33 -070017 * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
18 * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
19 * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
Lei Zhanga30e6562023-02-01 17:57:40 +000020 * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
21 * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
Bo Xufdc00a72014-10-28 23:03:33 -070022 * OF THIS SOFTWARE.
23 */
24
25/*
26 * TIFF Library.
27 */
Bo Xufdc00a72014-10-28 23:03:33 -070028#include "tiffiop.h"
29
Lei Zhang9c2c87d2016-01-07 15:52:44 -080030TIFFErrorHandlerExt _TIFFerrorHandlerExt = NULL;
Bo Xufdc00a72014-10-28 23:03:33 -070031
Lei Zhangfa80fee2023-11-15 20:46:10 +000032TIFFErrorHandler _TIFFwarningHandler = NULL;
33TIFFErrorHandler _TIFFerrorHandler = NULL;
34
Lei Zhanga30e6562023-02-01 17:57:40 +000035TIFFErrorHandler TIFFSetErrorHandler(TIFFErrorHandler handler)
Bo Xufdc00a72014-10-28 23:03:33 -070036{
Lei Zhanga30e6562023-02-01 17:57:40 +000037 TIFFErrorHandler prev = _TIFFerrorHandler;
38 _TIFFerrorHandler = handler;
39 return (prev);
Bo Xufdc00a72014-10-28 23:03:33 -070040}
41
Lei Zhanga30e6562023-02-01 17:57:40 +000042TIFFErrorHandlerExt TIFFSetErrorHandlerExt(TIFFErrorHandlerExt handler)
Bo Xufdc00a72014-10-28 23:03:33 -070043{
Lei Zhanga30e6562023-02-01 17:57:40 +000044 TIFFErrorHandlerExt prev = _TIFFerrorHandlerExt;
45 _TIFFerrorHandlerExt = handler;
46 return (prev);
Bo Xufdc00a72014-10-28 23:03:33 -070047}
48
Lei Zhanga30e6562023-02-01 17:57:40 +000049void TIFFError(const char *module, const char *fmt, ...)
Bo Xufdc00a72014-10-28 23:03:33 -070050{
Lei Zhanga30e6562023-02-01 17:57:40 +000051 va_list ap;
52 if (_TIFFerrorHandler)
53 {
54 va_start(ap, fmt);
55 (*_TIFFerrorHandler)(module, fmt, ap);
56 va_end(ap);
57 }
58 if (_TIFFerrorHandlerExt)
59 {
60 va_start(ap, fmt);
61 (*_TIFFerrorHandlerExt)(0, module, fmt, ap);
62 va_end(ap);
63 }
Bo Xufdc00a72014-10-28 23:03:33 -070064}
65
Lei Zhanga30e6562023-02-01 17:57:40 +000066void TIFFErrorExt(thandle_t fd, const char *module, const char *fmt, ...)
Bo Xufdc00a72014-10-28 23:03:33 -070067{
Lei Zhanga30e6562023-02-01 17:57:40 +000068 va_list ap;
69 if (_TIFFerrorHandler)
70 {
71 va_start(ap, fmt);
72 (*_TIFFerrorHandler)(module, fmt, ap);
73 va_end(ap);
74 }
75 if (_TIFFerrorHandlerExt)
76 {
77 va_start(ap, fmt);
78 (*_TIFFerrorHandlerExt)(fd, module, fmt, ap);
79 va_end(ap);
80 }
Bo Xufdc00a72014-10-28 23:03:33 -070081}
82
Lei Zhanga30e6562023-02-01 17:57:40 +000083void _TIFFErrorEarly(TIFFOpenOptions *opts, thandle_t clientdata,
84 const char *module, const char *fmt, ...)
85{
86 va_list ap;
87 if (opts && opts->errorhandler)
88 {
89 va_start(ap, fmt);
90 int stop = opts->errorhandler(NULL, opts->errorhandler_user_data,
91 module, fmt, ap);
92 va_end(ap);
93 if (stop)
94 return;
95 }
96 if (_TIFFerrorHandler)
97 {
98 va_start(ap, fmt);
99 (*_TIFFerrorHandler)(module, fmt, ap);
100 va_end(ap);
101 }
102 if (_TIFFerrorHandlerExt)
103 {
104 va_start(ap, fmt);
105 (*_TIFFerrorHandlerExt)(clientdata, module, fmt, ap);
106 va_end(ap);
107 }
108}
109
110void TIFFErrorExtR(TIFF *tif, const char *module, const char *fmt, ...)
111{
112 va_list ap;
113 if (tif && tif->tif_errorhandler)
114 {
115 va_start(ap, fmt);
116 int stop = (*tif->tif_errorhandler)(
117 tif, tif->tif_errorhandler_user_data, module, fmt, ap);
118 va_end(ap);
119 if (stop)
120 return;
121 }
122 if (_TIFFerrorHandler)
123 {
124 va_start(ap, fmt);
125 (*_TIFFerrorHandler)(module, fmt, ap);
126 va_end(ap);
127 }
128 if (_TIFFerrorHandlerExt)
129 {
130 va_start(ap, fmt);
131 (*_TIFFerrorHandlerExt)(tif ? tif->tif_clientdata : NULL, module, fmt,
132 ap);
133 va_end(ap);
134 }
135}