1 /*
2 * Copyright (c) 1988-1997 Sam Leffler
3 * Copyright (c) 1991-1997 Silicon Graphics, Inc.
4 *
5 * Permission to use, copy, modify, distribute, and sell this software and
6 * 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.
12 *
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 *
17 * 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,
20 * 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
22 * OF THIS SOFTWARE.
23 */
24
25 /*
26 * TIFF Library.
27 */
28 #include "tiffiop.h"
29
30 TIFFErrorHandlerExt _TIFFerrorHandlerExt = NULL;
31
TIFFSetErrorHandler(TIFFErrorHandler handler)32 TIFFErrorHandler TIFFSetErrorHandler(TIFFErrorHandler handler)
33 {
34 TIFFErrorHandler prev = _TIFFerrorHandler;
35 _TIFFerrorHandler = handler;
36 return (prev);
37 }
38
TIFFSetErrorHandlerExt(TIFFErrorHandlerExt handler)39 TIFFErrorHandlerExt TIFFSetErrorHandlerExt(TIFFErrorHandlerExt handler)
40 {
41 TIFFErrorHandlerExt prev = _TIFFerrorHandlerExt;
42 _TIFFerrorHandlerExt = handler;
43 return (prev);
44 }
45
TIFFError(const char * module,const char * fmt,...)46 void TIFFError(const char *module, const char *fmt, ...)
47 {
48 va_list ap;
49 if (_TIFFerrorHandler)
50 {
51 va_start(ap, fmt);
52 (*_TIFFerrorHandler)(module, fmt, ap);
53 va_end(ap);
54 }
55 if (_TIFFerrorHandlerExt)
56 {
57 va_start(ap, fmt);
58 (*_TIFFerrorHandlerExt)(0, module, fmt, ap);
59 va_end(ap);
60 }
61 }
62
TIFFErrorExt(thandle_t fd,const char * module,const char * fmt,...)63 void TIFFErrorExt(thandle_t fd, const char *module, const char *fmt, ...)
64 {
65 va_list ap;
66 if (_TIFFerrorHandler)
67 {
68 va_start(ap, fmt);
69 (*_TIFFerrorHandler)(module, fmt, ap);
70 va_end(ap);
71 }
72 if (_TIFFerrorHandlerExt)
73 {
74 va_start(ap, fmt);
75 (*_TIFFerrorHandlerExt)(fd, module, fmt, ap);
76 va_end(ap);
77 }
78 }
79
_TIFFErrorEarly(TIFFOpenOptions * opts,thandle_t clientdata,const char * module,const char * fmt,...)80 void _TIFFErrorEarly(TIFFOpenOptions *opts, thandle_t clientdata,
81 const char *module, const char *fmt, ...)
82 {
83 va_list ap;
84 if (opts && opts->errorhandler)
85 {
86 va_start(ap, fmt);
87 int stop = opts->errorhandler(NULL, opts->errorhandler_user_data,
88 module, fmt, ap);
89 va_end(ap);
90 if (stop)
91 return;
92 }
93 if (_TIFFerrorHandler)
94 {
95 va_start(ap, fmt);
96 (*_TIFFerrorHandler)(module, fmt, ap);
97 va_end(ap);
98 }
99 if (_TIFFerrorHandlerExt)
100 {
101 va_start(ap, fmt);
102 (*_TIFFerrorHandlerExt)(clientdata, module, fmt, ap);
103 va_end(ap);
104 }
105 }
106
TIFFErrorExtR(TIFF * tif,const char * module,const char * fmt,...)107 void TIFFErrorExtR(TIFF *tif, const char *module, const char *fmt, ...)
108 {
109 va_list ap;
110 if (tif && tif->tif_errorhandler)
111 {
112 va_start(ap, fmt);
113 int stop = (*tif->tif_errorhandler)(
114 tif, tif->tif_errorhandler_user_data, module, fmt, ap);
115 va_end(ap);
116 if (stop)
117 return;
118 }
119 if (_TIFFerrorHandler)
120 {
121 va_start(ap, fmt);
122 (*_TIFFerrorHandler)(module, fmt, ap);
123 va_end(ap);
124 }
125 if (_TIFFerrorHandlerExt)
126 {
127 va_start(ap, fmt);
128 (*_TIFFerrorHandlerExt)(tif ? tif->tif_clientdata : NULL, module, fmt,
129 ap);
130 va_end(ap);
131 }
132 }
133