/*****************************************************************************/ // Copyright 2006-2019 Adobe Systems Incorporated // All Rights Reserved. // // NOTICE: Adobe permits you to use, modify, and distribute this file in // accordance with the terms of the Adobe license agreement accompanying it. /*****************************************************************************/ #include "dng_exceptions.h" #include "dng_flags.h" #include "dng_globals.h" /*****************************************************************************/ #ifndef qDNGReportErrors // assuming this isn't enable on Win, because it's using printf, but an app can redirect that to console #define qDNGReportErrors ((qDNGDebug && qMacOS) || qDNGValidate) #endif /*****************************************************************************/ void ReportWarning (const char *message, const char *sub_message) { #if qDNGReportErrors #ifdef cr_logw cr_logs("report", 2, NULL, 0, cr_logfunc(), "%s %s\n", message, sub_message ? sub_message : ""); #else if (sub_message) fprintf (stderr, "*** Warning: %s (%s) ***\n", message, sub_message); else fprintf (stderr, "*** Warning: %s ***\n", message); #endif #else (void) message; (void) sub_message; #endif } /*****************************************************************************/ void ReportError (const char *message, const char *sub_message) { #if qDNGReportErrors #ifdef cr_loge cr_logs("report", 3, NULL, 0, cr_logfunc(), "%s %s\n", message, sub_message ? sub_message : ""); #else if (sub_message) fprintf (stderr, "*** Error: %s (%s) ***\n", message, sub_message); else fprintf (stderr, "*** Error: %s ***\n", message); #endif #else (void) message; (void) sub_message; #endif } /*****************************************************************************/ void Throw_dng_error (dng_error_code err, const char *message, const char *sub_message, bool silent) { #if qDNGReportErrors { if (!message) { switch (err) { case dng_error_none: case dng_error_silent: case dng_error_user_canceled: { break; } case dng_error_not_yet_implemented: { message = "Not yet implemented"; break; } case dng_error_host_insufficient: { message = "Host insufficient"; break; } case dng_error_memory: { message = "Unable to allocate memory"; break; } case dng_error_bad_format: { message = "File format is invalid"; break; } case dng_error_matrix_math: { message = "Matrix math error"; break; } case dng_error_open_file: { message = "Unable to open file"; break; } case dng_error_read_file: { message = "File read error"; break; } case dng_error_write_file: { message = "File write error"; break; } case dng_error_end_of_file: { message = "Unexpected end-of-file"; break; } case dng_error_file_is_damaged: { message = "File is damaged"; break; } case dng_error_image_too_big_dng: { message = "Image is too big to save as DNG"; break; } case dng_error_image_too_big_tiff: { message = "Image is too big to save as TIFF"; break; } case dng_error_unsupported_dng: { message = "DNG version is unsupported"; break; } case dng_error_overflow: { message = "Arithmetic overflow/underflow"; break; } default: { message = "Unknown error"; break; } } } if (message && !silent) { ReportError (message, sub_message); } } #else (void) message; (void) sub_message; (void) silent; #endif throw dng_exception (err); } /*****************************************************************************/