• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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