blob: ac0b9c373a36c6309fef1285ca7e60d5af90bc9d [file] [log] [blame]
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -08001/*
2 * Copyright (c) 1988-1997 Sam Leffler
3 * Copyright (c) 1991-1997 Silicon Graphics, Inc.
4 *
kumarashishg826308d2023-06-23 13:21:22 +00005 * Permission to use, copy, modify, distribute, and sell this software and
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -08006 * 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.
kumarashishg826308d2023-06-23 13:21:22 +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 *
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -080017 * 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,
kumarashishg826308d2023-06-23 13:21:22 +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
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -080022 * OF THIS SOFTWARE.
23 */
24
25/*
26 * TIFF Library.
27 */
28#include "tiffiop.h"
29
30TIFFErrorHandlerExt _TIFFerrorHandlerExt = NULL;
31
kumarashishg826308d2023-06-23 13:21:22 +000032TIFFErrorHandler TIFFSetErrorHandler(TIFFErrorHandler handler)
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -080033{
kumarashishg826308d2023-06-23 13:21:22 +000034 TIFFErrorHandler prev = _TIFFerrorHandler;
35 _TIFFerrorHandler = handler;
36 return (prev);
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -080037}
38
kumarashishg826308d2023-06-23 13:21:22 +000039TIFFErrorHandlerExt TIFFSetErrorHandlerExt(TIFFErrorHandlerExt handler)
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -080040{
kumarashishg826308d2023-06-23 13:21:22 +000041 TIFFErrorHandlerExt prev = _TIFFerrorHandlerExt;
42 _TIFFerrorHandlerExt = handler;
43 return (prev);
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -080044}
45
kumarashishg826308d2023-06-23 13:21:22 +000046void TIFFError(const char *module, const char *fmt, ...)
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -080047{
kumarashishg826308d2023-06-23 13:21:22 +000048 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 }
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -080061}
62
kumarashishg826308d2023-06-23 13:21:22 +000063void TIFFErrorExt(thandle_t fd, const char *module, const char *fmt, ...)
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -080064{
kumarashishg826308d2023-06-23 13:21:22 +000065 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 }
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -080078}
79
kumarashishg826308d2023-06-23 13:21:22 +000080void _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
107void 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}