1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
/*
* jerror.c
*
* Copyright (C) 1991, 1992, Thomas G. Lane.
* This file is part of the Independent JPEG Group's software.
* For conditions of distribution and use, see the accompanying README file.
*
* This file contains simple error-reporting and trace-message routines.
* These are suitable for Unix-like systems and others where writing to
* stderr is the right thing to do. If the JPEG software is integrated
* into a larger application, you may well need to replace these.
*
* The error_exit() routine should not return to its caller. Within a
* larger application, you might want to have it do a longjmp() to return
* control to the outer user interface routine. This should work since
* the portable JPEG code doesn't use setjmp/longjmp. You should make sure
* that free_all is called either within error_exit or after the return to
* the outer-level routine.
*
* These routines are used by both the compression and decompression code.
*/
#include "jinclude.h"
#ifdef INCLUDES_ARE_ANSI
#include <stdlib.h> /* to declare exit() */
#endif
#ifndef EXIT_FAILURE /* define exit() codes if not provided */
#define EXIT_FAILURE 1
#endif
static external_methods_ptr methods; /* saved for access to message_parm, free_all */
METHODDEF void
trace_message (const char *msgtext)
{
fprintf(stderr, msgtext,
methods->message_parm[0], methods->message_parm[1],
methods->message_parm[2], methods->message_parm[3],
methods->message_parm[4], methods->message_parm[5],
methods->message_parm[6], methods->message_parm[7]);
fprintf(stderr, "\n");
}
METHODDEF void
error_exit (const char *msgtext)
{
(*methods->trace_message) (msgtext);
(*methods->free_all) (); /* clean up memory allocation */
exit(EXIT_FAILURE);
}
/*
* The method selection routine for simple error handling.
* The system-dependent setup routine should call this routine
* to install the necessary method pointers in the supplied struct.
*/
GLOBAL void
jselerror (external_methods_ptr emethods)
{
methods = emethods; /* save struct addr for later access */
emethods->error_exit = error_exit;
emethods->trace_message = trace_message;
emethods->trace_level = 0; /* default = no tracing */
emethods->num_warnings = 0; /* no warnings emitted yet */
/* By default, the first corrupt-data warning will be displayed,
* but additional ones will appear only if trace level is at least 3.
* A corrupt data file could generate many warnings, so it's a good idea
* to suppress additional messages except at high tracing levels.
*/
emethods->first_warning_level = 0;
emethods->more_warning_level = 3;
}
|