My Project
debian-1:4.1.1-p2+ds-4build1
omalloc
omError.c
Go to the documentation of this file.
1
/*******************************************************************
2
* File: omError.c
3
* Purpose: implementation of Error handling routines
4
* Author: obachman (Olaf Bachmann)
5
* Created: 11/99
6
*******************************************************************/
7
8
#include <stdarg.h>
9
#include "
omalloc.h
"
10
11
omError_t
om_ErrorStatus
=
omError_NoError
;
12
omError_t
om_InternalErrorStatus
=
omError_NoError
;
13
14
struct
omErrorString_s
15
{
16
omError_t
error
;
17
char
*
s_error
;
18
char
*
string
;
19
};
20
21
/* strings describing omErrors */
22
static
const
struct
omErrorString_s
om_ErrorStrings
[] =
23
{
24
{
omError_NoError
,
"omError_NoError"
,
"no error"
},
25
{
omError_Unknown
,
"omError_Unknown"
,
"unknown error"
},
26
{
omError_MemoryCorrupted
,
"omError_MemoryCorrupted"
,
"memory corrupted"
},
27
{
omError_InternalBug
,
"omError_InternalBug"
,
"internal omalloc bug"
},
28
{
omError_NullAddr
,
"omError_NullAddr"
,
"addr is NULL"
},
29
{
omError_InvalidRangeAddr
,
"omError_InvalidRangeAddr"
,
"addr not in valid range"
},
30
{
omError_FalseAddr
,
"omError_FalseAddr"
,
"addr not as returned by omalloc"
},
31
{
omError_FalseAddrOrMemoryCorrupted
,
"omError_FalseAddrOrMemoryCorrupted"
,
"addr not as returned by omalloc or memory corrupted"
, },
32
{
omError_WrongSize
,
"omError_WrongSize"
,
"wrong size specification of addr"
},
33
{
omError_FreedAddr
,
"omError_FreedAddr"
,
"addr had previosuly been freed"
},
34
{
omError_FreedAddrOrMemoryCorrupted
,
"omError_FreedAddrOrMemoryCorrupted"
,
"addr had previosuly been freed or memory corrupted"
},
35
{
omError_WrongBin
,
"omError_WrongBin"
,
"addr is not from given Bin"
},
36
{
omError_UnknownBin
,
"omError_UnknownBin"
,
"given Bin is unknown"
},
37
{
omError_NotBinAddr
,
"omError_NotBinAddr"
,
"addr is not a BinAddr"
},
38
{
omError_UnalignedAddr
,
"omError_UnalignedAddr"
,
"addr is unaligned"
},
39
{
omError_NullSizeAlloc
,
"omError_NullSizeAlloc"
,
"alloc of size 0"
},
40
{
omError_ListCycleError
,
"omError_ListCycleError"
,
"list has cycles"
},
41
{
omError_SortedListError
,
"omError_SortedListError"
,
"sorted list is unsorted"
},
42
{
omError_KeptAddrListCorrupted
,
"omError_KeptAddrListCorrupted"
,
"list of kept addresses are corrupted"
},
43
{
omError_FrontPattern
,
"omError_FrontPattern"
,
"written to front of addr"
},
44
{
omError_BackPattern
,
"omError_BackPattern"
,
"written after end of addr"
},
45
{
omError_FreePattern
,
"omError_FreePattern"
,
"written into freed memory"
},
46
{
omError_NotString
,
"omError_NotString"
,
"string not null terminated"
},
47
{
omError_StickyBin
,
"omError_StickyBin"
,
"wrong handling of sticky bins"
},
48
49
{
omError_MaxError
,
NULL
}
/* this needs to be the last entry */
50
};
51
52
const
char
*
omError2String
(
omError_t
error
)
53
{
54
int
i
= 0;
55
while
(! (
om_ErrorStrings
[
i
].
string
==
NULL
&&
om_ErrorStrings
[
i
].
error
==
omError_MaxError
))
56
{
57
if
(
om_ErrorStrings
[
i
].
error
==
error
)
return
om_ErrorStrings
[
i
].
string
;
58
i
++;
59
}
60
return
"undocumented error"
;
61
}
62
63
const
char
*
omError2Serror
(
omError_t
error
)
64
{
65
int
i
= 0;
66
while
(! (
om_ErrorStrings
[
i
].
string
==
NULL
&&
om_ErrorStrings
[
i
].
error
==
omError_MaxError
))
67
{
68
if
(
om_ErrorStrings
[
i
].
error
==
error
)
return
om_ErrorStrings
[
i
].
s_error
;
69
i
++;
70
}
71
return
"omError_UnKnown"
;
72
}
73
74
#ifndef OM_NDEBUG
75
int
om_CallErrorHook
= 1;
76
#endif
77
78
omError_t
omReportError
(
omError_t
error
,
omError_t
report_error, OM_FLR_DECL,
79
const
char
* fmt, ...)
80
{
81
int
max_check, max_track;
82
83
if
(report_error ==
omError_MaxError
)
return
error
;
84
/* reset MaxTrack and MaxCheck to prevent infinite loop, in case
85
printf allocates memory */
86
max_check =
om_Opts
.MaxCheck;
87
max_track =
om_Opts
.MaxTrack;
88
om_Opts
.MaxCheck = 0;
89
om_Opts
.MaxTrack = 0;
90
91
om_InternalErrorStatus
=
error
;
92
om_ErrorStatus
= (report_error ==
omError_NoError
?
error
: report_error);
93
94
if
(
om_Opts
.HowToReportErrors &&
om_ErrorStatus
!=
omError_NoError
)
95
{
96
/* to avoid spurious error msg in 64 bit mode*/
97
if
(
om_ErrorStatus
==
omError_StickyBin
)
return
error
;
98
fprintf(stderr,
"***%s: %s"
,
omError2Serror
(
om_ErrorStatus
),
omError2String
(
om_ErrorStatus
));
99
100
#ifdef OM_INTERNAL_DEBUG
101
if
(
om_ErrorStatus
!=
error
)
102
fprintf(stderr,
"\n___%s: %s"
,
omError2Serror
(
error
),
omError2String
(
error
));
103
#endif
104
105
if
(
om_Opts
.HowToReportErrors > 2 && fmt !=
NULL
&& *fmt !=
'\0'
)
106
{
107
va_list
ap
;
108
va_start(
ap
, fmt);
109
fputs(
": "
,stderr);
110
vfprintf(stderr, fmt,
ap
);
111
va_end(
ap
);
112
}
113
114
if
(
om_Opts
.HowToReportErrors > 1)
115
{
116
#ifndef OM_NDEBUG
117
fputs(
"\n occurred at: "
,stderr);
118
if
(!
_omPrintCurrentBackTrace
(stderr, OM_FLR_VAL))
119
fputs(
" ??"
,stderr);
120
#endif
121
}
122
fputc(
'\n'
,stderr);
123
fflush(stderr);
124
}
125
if
(
om_CallErrorHook
)
126
om_Opts
.ErrorHook();
127
128
om_Opts
.MaxCheck = max_check;
129
om_Opts
.MaxTrack = max_track;
130
return
error
;
131
}
132
133
134
/* this is a dummy function and used as default for om_Opts.ErrorHook */
135
extern
void
omErrorBreak
()
136
{}
omError_FrontPattern
Definition:
omError.h:44
error
void error(const char *fmt,...)
Definition:
emacs.cc:54
omalloc.h
omErrorBreak
void omErrorBreak()
Definition:
omError.c:134
omErrorString_s::s_error
char * s_error
Definition:
omError.c:16
omError_SortedListError
Definition:
omError.h:40
omError_BackPattern
Definition:
omError.h:43
omErrorString_s
Definition:
omError.c:13
omErrorString_s::error
omError_t error
Definition:
omError.c:15
omError_FreePattern
Definition:
omError.h:42
omError2String
const char * omError2String(omError_t error)
Definition:
omError.c:51
omReportError
omError_t omReportError(omError_t error, omError_t report_error, OM_FLR_DECL, const char *fmt,...)
Definition:
omError.c:77
_omPrintCurrentBackTrace
int _omPrintCurrentBackTrace(FILE *fd, OM_FLR_DECL)
Definition:
omRet2Info.c:267
omError_InvalidRangeAddr
Definition:
omError.h:28
ap
Definition:
ap.h:35
omError_UnalignedAddr
Definition:
omError.h:37
om_ErrorStrings
static const struct omErrorString_s om_ErrorStrings[]
Definition:
omError.c:21
om_InternalErrorStatus
omError_t om_InternalErrorStatus
Definition:
omError.c:11
omError2Serror
const char * omError2Serror(omError_t error)
Definition:
omError.c:62
i
int i
Definition:
cfEzgcd.cc:125
om_ErrorStatus
omError_t om_ErrorStatus
Definition:
omError.c:10
omError_NullAddr
Definition:
omError.h:27
omError_WrongBin
Definition:
omError.h:34
omError_FalseAddrOrMemoryCorrupted
Definition:
omError.h:30
omError_NoError
Definition:
omError.h:23
omError_FreedAddr
Definition:
omError.h:32
omError_WrongSize
Definition:
omError.h:31
omError_Unknown
Definition:
omError.h:24
omErrorString_s::string
char * string
Definition:
omError.c:17
omError_NotString
Definition:
omError.h:45
omError_KeptAddrListCorrupted
Definition:
omError.h:41
om_CallErrorHook
int om_CallErrorHook
Definition:
omError.c:74
omError_FreedAddrOrMemoryCorrupted
Definition:
omError.h:33
omError_UnknownBin
Definition:
omError.h:35
om_Opts
omOpts_t om_Opts
Definition:
omOpts.c:10
omError_ListCycleError
Definition:
omError.h:39
NULL
#define NULL
Definition:
omList.c:9
omError_NotBinAddr
Definition:
omError.h:36
omError_MaxError
Definition:
omError.h:47
omError_FalseAddr
Definition:
omError.h:29
omError_StickyBin
Definition:
omError.h:46
omError_NullSizeAlloc
Definition:
omError.h:38
omError_InternalBug
Definition:
omError.h:25
omError_t
enum omError_e omError_t
Definition:
omError.h:42
omError_MemoryCorrupted
Definition:
omError.h:26
Generated on Wed Jan 29 2020 08:34:04 for My Project by
doxygen 1.8.16
for
Singular debian-1:4.1.1-p2+ds-4build1