1 /*****************************************************************************/
2 // Copyright 2006-2019 Adobe Systems Incorporated
3 // All Rights Reserved.
4 //
5 // NOTICE: Adobe permits you to use, modify, and distribute this file in
6 // accordance with the terms of the Adobe license agreement accompanying it.
7 /*****************************************************************************/
8
9 #include "dng_exceptions.h"
10
11 #include "dng_flags.h"
12 #include "dng_globals.h"
13
14 /*****************************************************************************/
15
16 #ifndef qDNGReportErrors
17 // assuming this isn't enable on Win, because it's using printf, but an app can redirect that to console
18 #define qDNGReportErrors ((qDNGDebug && qMacOS) || qDNGValidate)
19 #endif
20
21 /*****************************************************************************/
22
ReportWarning(const char * message,const char * sub_message)23 void ReportWarning (const char *message,
24 const char *sub_message)
25 {
26
27 #if qDNGReportErrors
28
29 #ifdef cr_logw
30
31 cr_logs("report", 2, NULL, 0, cr_logfunc(), "%s %s\n", message, sub_message ? sub_message : "");
32
33 #else
34
35 if (sub_message)
36 fprintf (stderr, "*** Warning: %s (%s) ***\n", message, sub_message);
37 else
38 fprintf (stderr, "*** Warning: %s ***\n", message);
39
40 #endif
41
42 #else
43
44 (void) message;
45 (void) sub_message;
46
47 #endif
48
49 }
50
51 /*****************************************************************************/
52
ReportError(const char * message,const char * sub_message)53 void ReportError (const char *message,
54 const char *sub_message)
55 {
56
57 #if qDNGReportErrors
58
59 #ifdef cr_loge
60
61 cr_logs("report", 3, NULL, 0, cr_logfunc(), "%s %s\n", message, sub_message ? sub_message : "");
62
63 #else
64
65 if (sub_message)
66 fprintf (stderr, "*** Error: %s (%s) ***\n", message, sub_message);
67 else
68 fprintf (stderr, "*** Error: %s ***\n", message);
69
70 #endif
71
72 #else
73
74 (void) message;
75 (void) sub_message;
76
77 #endif
78
79 }
80
81 /*****************************************************************************/
82
Throw_dng_error(dng_error_code err,const char * message,const char * sub_message,bool silent)83 void Throw_dng_error (dng_error_code err,
84 const char *message,
85 const char *sub_message,
86 bool silent)
87 {
88
89 #if qDNGReportErrors
90
91 {
92
93 if (!message)
94 {
95
96 switch (err)
97 {
98
99 case dng_error_none:
100 case dng_error_silent:
101 case dng_error_user_canceled:
102 {
103 break;
104 }
105
106 case dng_error_not_yet_implemented:
107 {
108 message = "Not yet implemented";
109 break;
110 }
111
112 case dng_error_host_insufficient:
113 {
114 message = "Host insufficient";
115 break;
116 }
117
118 case dng_error_memory:
119 {
120 message = "Unable to allocate memory";
121 break;
122 }
123
124 case dng_error_bad_format:
125 {
126 message = "File format is invalid";
127 break;
128 }
129
130 case dng_error_matrix_math:
131 {
132 message = "Matrix math error";
133 break;
134 }
135
136 case dng_error_open_file:
137 {
138 message = "Unable to open file";
139 break;
140 }
141
142 case dng_error_read_file:
143 {
144 message = "File read error";
145 break;
146 }
147
148 case dng_error_write_file:
149 {
150 message = "File write error";
151 break;
152 }
153
154 case dng_error_end_of_file:
155 {
156 message = "Unexpected end-of-file";
157 break;
158 }
159
160 case dng_error_file_is_damaged:
161 {
162 message = "File is damaged";
163 break;
164 }
165
166 case dng_error_image_too_big_dng:
167 {
168 message = "Image is too big to save as DNG";
169 break;
170 }
171
172 case dng_error_image_too_big_tiff:
173 {
174 message = "Image is too big to save as TIFF";
175 break;
176 }
177
178 case dng_error_unsupported_dng:
179 {
180 message = "DNG version is unsupported";
181 break;
182 }
183
184 case dng_error_overflow:
185 {
186 message = "Arithmetic overflow/underflow";
187 break;
188 }
189
190 default:
191 {
192 message = "Unknown error";
193 break;
194 }
195
196 }
197
198 }
199
200 if (message && !silent)
201 {
202 ReportError (message, sub_message);
203 }
204
205 }
206
207 #else
208
209 (void) message;
210 (void) sub_message;
211 (void) silent;
212
213 #endif
214
215 throw dng_exception (err);
216
217 }
218
219 /*****************************************************************************/
220