19f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/*
29f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * jerror.c
39f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *
49f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Copyright (C) 1991-1998, Thomas G. Lane.
59f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * This file is part of the Independent JPEG Group's software.
69f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * For conditions of distribution and use, see the accompanying README file.
79f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *
89f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * This file contains simple error-reporting and trace-message routines.
99f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * These are suitable for Unix-like systems and others where writing to
109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * stderr is the right thing to do.  Many applications will want to replace
119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * some or all of these routines.
129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *
139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * If you define USE_WINDOWS_MESSAGEBOX in jconfig.h or in the makefile,
149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * you get a Windows-specific hack to display error messages in a dialog box.
159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * It ain't much, but it beats dropping error messages into the bit bucket,
169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * which is what happens to output to stderr under most Windows C compilers.
179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *
189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * These routines are used by both the compression and decompression code.
199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */
209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* this is not a core library module, so it doesn't define JPEG_INTERNALS */
229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include "jinclude.h"
239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include "jpeglib.h"
249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include "jversion.h"
259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include "jerror.h"
269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifdef USE_WINDOWS_MESSAGEBOX
289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include <windows.h>
299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif
309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifndef EXIT_FAILURE		/* define exit() codes if not provided */
329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define EXIT_FAILURE  1
339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif
349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/*
379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Create the message string table.
389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * We do this from the master message list in jerror.h by re-reading
399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * jerror.h with a suitable definition for macro JMESSAGE.
409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * The message table is made an external symbol just in case any applications
419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * want to refer to it directly.
429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */
439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifdef NEED_SHORT_EXTERNAL_NAMES
459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define jpeg_std_message_table	jMsgTable
469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif
479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define JMESSAGE(code,string)	string ,
499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectconst char * const jpeg_std_message_table[] = {
519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include "jerror.h"
529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  NULL
539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project};
549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/*
579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Error exit handler: must not return to caller.
589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *
599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Applications may override this if they want to get control back after
609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * an error.  Typically one would longjmp somewhere instead of exiting.
619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * The setjmp buffer can be made a private field within an expanded error
629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * handler object.  Note that the info needed to generate an error message
639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * is stored in the error object, so you can generate the message now or
649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * later, at your convenience.
659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * You should make sure that the JPEG object is cleaned up (with jpeg_abort
669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * or jpeg_destroy) at some point.
679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */
689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectMETHODDEF(void)
709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projecterror_exit (j_common_ptr cinfo)
719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{
729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  /* Always display the message */
739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  (*cinfo->err->output_message) (cinfo);
749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  /* Let the memory manager delete any temp files before we die */
769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  jpeg_destroy(cinfo);
779f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  exit(EXIT_FAILURE);
799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project}
809f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
819f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
829f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/*
839f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Actual output of an error or trace message.
849f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Applications may override this method to send JPEG messages somewhere
859f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * other than stderr.
869f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *
879f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * On Windows, printing to stderr is generally completely useless,
889f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * so we provide optional code to produce an error-dialog popup.
899f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Most Windows applications will still prefer to override this routine,
909f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * but if they don't, it'll do something at least marginally useful.
919f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *
929f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * NOTE: to use the library in an environment that doesn't support the
939f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * C stdio library, you may have to delete the call to fprintf() entirely,
949f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * not just not use this routine.
959f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */
969f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
979f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectMETHODDEF(void)
989f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectoutput_message (j_common_ptr cinfo)
999f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{
1009f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  char buffer[JMSG_LENGTH_MAX];
1019f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1029f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  /* Create the message */
1039f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  (*cinfo->err->format_message) (cinfo, buffer);
1049f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1059f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifdef USE_WINDOWS_MESSAGEBOX
1069f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  /* Display it in a message dialog box */
1079f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  MessageBox(GetActiveWindow(), buffer, "JPEG Library Error",
1089f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	     MB_OK | MB_ICONERROR);
1099f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#else
1109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  /* Send it to stderr, adding a newline */
1119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  fprintf(stderr, "%s\n", buffer);
1129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif
1139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project}
1149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/*
1179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Decide whether to emit a trace or warning message.
1189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * msg_level is one of:
1199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *   -1: recoverable corrupt-data warning, may want to abort.
1209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *    0: important advisory messages (always display to user).
1219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *    1: first level of tracing detail.
1229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *    2,3,...: successively more detailed tracing messages.
1239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * An application might override this method if it wanted to abort on warnings
1249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * or change the policy about which messages to display.
1259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */
1269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectMETHODDEF(void)
1289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectemit_message (j_common_ptr cinfo, int msg_level)
1299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{
1309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  struct jpeg_error_mgr * err = cinfo->err;
1319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  if (msg_level < 0) {
1339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    /* It's a warning message.  Since corrupt files may generate many warnings,
1349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project     * the policy implemented here is to show only the first warning,
1359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project     * unless trace_level >= 3.
1369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project     */
1379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    if (err->num_warnings == 0 || err->trace_level >= 3)
1389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project      (*err->output_message) (cinfo);
1399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    /* Always count warnings in num_warnings. */
1409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    err->num_warnings++;
1419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  } else {
1429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    /* It's a trace message.  Show it if trace_level >= msg_level. */
1439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    if (err->trace_level >= msg_level)
1449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project      (*err->output_message) (cinfo);
1459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  }
1469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project}
1479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/*
1509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Format a message string for the most recent JPEG error or message.
1519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * The message is stored into buffer, which should be at least JMSG_LENGTH_MAX
1529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * characters.  Note that no '\n' character is added to the string.
1539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Few applications should need to override this method.
1549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */
1559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectMETHODDEF(void)
1579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectformat_message (j_common_ptr cinfo, char * buffer)
1589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{
1599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  struct jpeg_error_mgr * err = cinfo->err;
1609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  int msg_code = err->msg_code;
1619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  const char * msgtext = NULL;
1629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  const char * msgptr;
1639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  char ch;
1649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  boolean isstring;
1659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  /* Look up message string in proper table */
1679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  if (msg_code > 0 && msg_code <= err->last_jpeg_message) {
1689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    msgtext = err->jpeg_message_table[msg_code];
1699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  } else if (err->addon_message_table != NULL &&
1709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	     msg_code >= err->first_addon_message &&
1719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	     msg_code <= err->last_addon_message) {
1729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    msgtext = err->addon_message_table[msg_code - err->first_addon_message];
1739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  }
1749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  /* Defend against bogus message number */
1769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  if (msgtext == NULL) {
1779f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    err->msg_parm.i[0] = msg_code;
1789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    msgtext = err->jpeg_message_table[0];
1799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  }
1809f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1819f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  /* Check for string parameter, as indicated by %s in the message text */
1829f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  isstring = FALSE;
1839f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  msgptr = msgtext;
1849f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  while ((ch = *msgptr++) != '\0') {
1859f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    if (ch == '%') {
1869f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project      if (*msgptr == 's') isstring = TRUE;
1879f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project      break;
1889f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    }
1899f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  }
1909f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1919f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  /* Format the message into the passed buffer */
1929f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  if (isstring)
1939f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    sprintf(buffer, msgtext, err->msg_parm.s);
1949f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  else
1959f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    sprintf(buffer, msgtext,
1969f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    err->msg_parm.i[0], err->msg_parm.i[1],
1979f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    err->msg_parm.i[2], err->msg_parm.i[3],
1989f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    err->msg_parm.i[4], err->msg_parm.i[5],
1999f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project	    err->msg_parm.i[6], err->msg_parm.i[7]);
2009f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project}
2019f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2029f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2039f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/*
2049f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Reset error state variables at start of a new image.
2059f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * This is called during compression startup to reset trace/error
2069f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * processing to default state, without losing any application-specific
2079f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * method pointers.  An application might possibly want to override
2089f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * this method if it has additional error processing state.
2099f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */
2109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectMETHODDEF(void)
2129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectreset_error_mgr (j_common_ptr cinfo)
2139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{
2149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  cinfo->err->num_warnings = 0;
2159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  /* trace_level is not reset since it is an application-supplied parameter */
2169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  cinfo->err->msg_code = 0;	/* may be useful as a flag for "no error" */
2179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project}
2189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/*
2219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Fill in the standard error-handling methods in a jpeg_error_mgr object.
2229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Typical call is:
2239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *	struct jpeg_compress_struct cinfo;
2249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *	struct jpeg_error_mgr err;
2259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *
2269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *	cinfo.err = jpeg_std_error(&err);
2279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * after which the application may override some of the methods.
2289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */
2299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectGLOBAL(struct jpeg_error_mgr *)
2319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectjpeg_std_error (struct jpeg_error_mgr * err)
2329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{
2339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  err->error_exit = error_exit;
2349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  err->emit_message = emit_message;
2359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  err->output_message = output_message;
2369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  err->format_message = format_message;
2379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  err->reset_error_mgr = reset_error_mgr;
2389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  err->trace_level = 0;		/* default = no tracing */
2409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  err->num_warnings = 0;	/* no warnings emitted yet */
2419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  err->msg_code = 0;		/* may be useful as a flag for "no error" */
2429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  /* Initialize message table pointers */
2449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  err->jpeg_message_table = jpeg_std_message_table;
2459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  err->last_jpeg_message = (int) JMSG_LASTMSGCODE - 1;
2469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  err->addon_message_table = NULL;
2489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  err->first_addon_message = 0;	/* for safety */
2499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  err->last_addon_message = 0;
2509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  return err;
2529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project}
253