1f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* 2f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * jerror.c 3f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * 4f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * Copyright (C) 1991-1998, Thomas G. Lane. 5f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * This file is part of the Independent JPEG Group's software. 6f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * For conditions of distribution and use, see the accompanying README file. 7f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * 8f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * This file contains simple error-reporting and trace-message routines. 9f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * These are suitable for Unix-like systems and others where writing to 10f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * stderr is the right thing to do. Many applications will want to replace 11f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * some or all of these routines. 12f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * 13f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * If you define USE_WINDOWS_MESSAGEBOX in jconfig.h or in the makefile, 14f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * you get a Windows-specific hack to display error messages in a dialog box. 15f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * It ain't much, but it beats dropping error messages into the bit bucket, 16f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * which is what happens to output to stderr under most Windows C compilers. 17f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * 18f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * These routines are used by both the compression and decompression code. 19f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org */ 20f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 21f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* this is not a core library module, so it doesn't define JPEG_INTERNALS */ 22f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#include "jinclude.h" 23f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#include "jpeglib.h" 24f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#include "jversion.h" 25f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#include "jerror.h" 26f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 27f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#ifdef USE_WINDOWS_MESSAGEBOX 28f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#include <windows.h> 29f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#endif 30f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 31f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#ifndef EXIT_FAILURE /* define exit() codes if not provided */ 32f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#define EXIT_FAILURE 1 33f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#endif 34f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 35f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 36f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* 37f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * Create the message string table. 38f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * We do this from the master message list in jerror.h by re-reading 39f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * jerror.h with a suitable definition for macro JMESSAGE. 40f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * The message table is made an external symbol just in case any applications 41f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * want to refer to it directly. 42f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org */ 43f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 44f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#ifdef NEED_SHORT_EXTERNAL_NAMES 45f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#define jpeg_std_message_table jMsgTable 46f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#endif 47f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 48f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#define JMESSAGE(code,string) string , 49f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 50f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgconst char * const jpeg_std_message_table[] = { 51f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#include "jerror.h" 52f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org NULL 53f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org}; 54f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 55f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 56f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* 57f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * Error exit handler: must not return to caller. 58f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * 59f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * Applications may override this if they want to get control back after 60f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * an error. Typically one would longjmp somewhere instead of exiting. 61f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * The setjmp buffer can be made a private field within an expanded error 62f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * handler object. Note that the info needed to generate an error message 63f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * is stored in the error object, so you can generate the message now or 64f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * later, at your convenience. 65f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * You should make sure that the JPEG object is cleaned up (with jpeg_abort 66f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * or jpeg_destroy) at some point. 67f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org */ 68f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 69f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgMETHODDEF(void) 70f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgerror_exit (j_common_ptr cinfo) 71f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 72f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* Always display the message */ 73f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org (*cinfo->err->output_message) (cinfo); 74f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 75f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* Let the memory manager delete any temp files before we die */ 76f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org jpeg_destroy(cinfo); 77f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 78f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org exit(EXIT_FAILURE); 79f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 80f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 81f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 82f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* 83f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * Actual output of an error or trace message. 84f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * Applications may override this method to send JPEG messages somewhere 85f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * other than stderr. 86f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * 87f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * On Windows, printing to stderr is generally completely useless, 88f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * so we provide optional code to produce an error-dialog popup. 89f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * Most Windows applications will still prefer to override this routine, 90f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * but if they don't, it'll do something at least marginally useful. 91f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * 92f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * NOTE: to use the library in an environment that doesn't support the 93f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * C stdio library, you may have to delete the call to fprintf() entirely, 94f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * not just not use this routine. 95f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org */ 96f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 97f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgMETHODDEF(void) 98f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgoutput_message (j_common_ptr cinfo) 99f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 100f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org char buffer[JMSG_LENGTH_MAX]; 101f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 102f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* Create the message */ 103f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org (*cinfo->err->format_message) (cinfo, buffer); 104f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 105f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#ifdef USE_WINDOWS_MESSAGEBOX 106f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* Display it in a message dialog box */ 107f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org MessageBox(GetActiveWindow(), buffer, "JPEG Library Error", 108f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org MB_OK | MB_ICONERROR); 109f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#else 110f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* Send it to stderr, adding a newline */ 111f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org fprintf(stderr, "%s\n", buffer); 112f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org#endif 113f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 114f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 115f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 116f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* 117f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * Decide whether to emit a trace or warning message. 118f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * msg_level is one of: 119f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * -1: recoverable corrupt-data warning, may want to abort. 120f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * 0: important advisory messages (always display to user). 121f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * 1: first level of tracing detail. 122f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * 2,3,...: successively more detailed tracing messages. 123f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * An application might override this method if it wanted to abort on warnings 124f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * or change the policy about which messages to display. 125f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org */ 126f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 127f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgMETHODDEF(void) 128f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgemit_message (j_common_ptr cinfo, int msg_level) 129f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 130f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org struct jpeg_error_mgr * err = cinfo->err; 131f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 132f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (msg_level < 0) { 133f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* It's a warning message. Since corrupt files may generate many warnings, 134f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * the policy implemented here is to show only the first warning, 135f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * unless trace_level >= 3. 136f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org */ 137f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (err->num_warnings == 0 || err->trace_level >= 3) 138f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org (*err->output_message) (cinfo); 139f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* Always count warnings in num_warnings. */ 140f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org err->num_warnings++; 141f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org } else { 142f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* It's a trace message. Show it if trace_level >= msg_level. */ 143f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (err->trace_level >= msg_level) 144f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org (*err->output_message) (cinfo); 145f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org } 146f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 147f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 148f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 149f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* 150f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * Format a message string for the most recent JPEG error or message. 151f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * The message is stored into buffer, which should be at least JMSG_LENGTH_MAX 152f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * characters. Note that no '\n' character is added to the string. 153f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * Few applications should need to override this method. 154f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org */ 155f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 156f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgMETHODDEF(void) 157f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgformat_message (j_common_ptr cinfo, char * buffer) 158f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 159f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org struct jpeg_error_mgr * err = cinfo->err; 160f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org int msg_code = err->msg_code; 161f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org const char * msgtext = NULL; 162f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org const char * msgptr; 163f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org char ch; 164f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org boolean isstring; 165f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 166f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* Look up message string in proper table */ 167f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (msg_code > 0 && msg_code <= err->last_jpeg_message) { 168f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org msgtext = err->jpeg_message_table[msg_code]; 169f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org } else if (err->addon_message_table != NULL && 170f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org msg_code >= err->first_addon_message && 171f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org msg_code <= err->last_addon_message) { 172f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org msgtext = err->addon_message_table[msg_code - err->first_addon_message]; 173f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org } 174f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 175f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* Defend against bogus message number */ 176f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (msgtext == NULL) { 177f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org err->msg_parm.i[0] = msg_code; 178f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org msgtext = err->jpeg_message_table[0]; 179f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org } 180f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 181f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* Check for string parameter, as indicated by %s in the message text */ 182f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org isstring = FALSE; 183f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org msgptr = msgtext; 184f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org while ((ch = *msgptr++) != '\0') { 185f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (ch == '%') { 186f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (*msgptr == 's') isstring = TRUE; 187f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org break; 188f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org } 189f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org } 190f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 191f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* Format the message into the passed buffer */ 192f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org if (isstring) 193f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sprintf(buffer, msgtext, err->msg_parm.s); 194f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org else 195f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org sprintf(buffer, msgtext, 196f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org err->msg_parm.i[0], err->msg_parm.i[1], 197f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org err->msg_parm.i[2], err->msg_parm.i[3], 198f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org err->msg_parm.i[4], err->msg_parm.i[5], 199f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org err->msg_parm.i[6], err->msg_parm.i[7]); 200f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 201f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 202f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 203f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* 204f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * Reset error state variables at start of a new image. 205f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * This is called during compression startup to reset trace/error 206f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * processing to default state, without losing any application-specific 207f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * method pointers. An application might possibly want to override 208f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * this method if it has additional error processing state. 209f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org */ 210f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 211f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgMETHODDEF(void) 212f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgreset_error_mgr (j_common_ptr cinfo) 213f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 214f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org cinfo->err->num_warnings = 0; 215f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* trace_level is not reset since it is an application-supplied parameter */ 216f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org cinfo->err->msg_code = 0; /* may be useful as a flag for "no error" */ 217f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 218f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 219f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 220f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org/* 221f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * Fill in the standard error-handling methods in a jpeg_error_mgr object. 222f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * Typical call is: 223f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * struct jpeg_compress_struct cinfo; 224f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * struct jpeg_error_mgr err; 225f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * 226f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * cinfo.err = jpeg_std_error(&err); 227f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org * after which the application may override some of the methods. 228f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org */ 229f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 230f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgGLOBAL(struct jpeg_error_mgr *) 231f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.orgjpeg_std_error (struct jpeg_error_mgr * err) 232f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org{ 233f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org err->error_exit = error_exit; 234f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org err->emit_message = emit_message; 235f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org err->output_message = output_message; 236f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org err->format_message = format_message; 237f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org err->reset_error_mgr = reset_error_mgr; 238f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 239f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org err->trace_level = 0; /* default = no tracing */ 240f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org err->num_warnings = 0; /* no warnings emitted yet */ 241f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org err->msg_code = 0; /* may be useful as a flag for "no error" */ 242f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 243f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org /* Initialize message table pointers */ 244f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org err->jpeg_message_table = jpeg_std_message_table; 245f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org err->last_jpeg_message = (int) JMSG_LASTMSGCODE - 1; 246f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 247f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org err->addon_message_table = NULL; 248f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org err->first_addon_message = 0; /* for safety */ 249f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org err->last_addon_message = 0; 250f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org 251f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org return err; 252f0c4f33a4aa0760ba0e12a254b69d996442c9c5hbono@chromium.org} 253