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