source: git/omalloc/omError.c @ 4697a8a

fieker-DuValspielwiese
Last change on this file since 4697a8a was e70e45, checked in by Olaf Bachmann <obachman@…>, 24 years ago
* re-added files git-svn-id: file:///usr/local/Singular/svn/trunk@4521 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 4.7 KB
Line 
1/*******************************************************************
2 *  File:    omError.c
3 *  Purpose: implementation of Error handling routines
4 *  Author:  obachman (Olaf Bachmann)
5 *  Created: 11/99
6 *  Version: $Id: omError.c,v 1.3 2000-08-14 12:26:44 obachman Exp $
7 *******************************************************************/
8
9#include <stdarg.h>
10#include "omAlloc.h"
11
12omError_t om_ErrorStatus = omError_NoError;
13omError_t om_InternalErrorStatus = omError_NoError;
14
15struct omErrorString_s
16{
17  omError_t error;
18  char* s_error;
19  char* string;
20};
21
22/* strings describing omErrors */
23static struct omErrorString_s om_ErrorStrings[] =
24{
25  {omError_NoError,                     "omError_NoError",                     "no error"},
26  {omError_Unknown,                     "omError_Unknown",                     "unknown error" },
27  {omError_MemoryCorrupted,             "omError_MemoryCorrupted",             "memory corrupted"},
28  {omError_InternalBug,                 "omError_InternalBug",                 "internal omalloc bug"},
29  {omError_NullAddr,                    "omError_NullAddr",                    "addr is NULL"},
30  {omError_InvalidRangeAddr,            "omError_InvalidRangeAddr",            "addr not in valid range"},
31  {omError_FalseAddr,                   "omError_FalseAddr",                   "addr not as returned by omalloc"},
32  {omError_FalseAddrOrMemoryCorrupted,  "omError_FalseAddrOrMemoryCorrupted",  "addr not as returned by omalloc or memory corrupted", },
33  {omError_WrongSize,                   "omError_WrongSize",                   "wrong size specification of addr"},
34  {omError_FreedAddr,                   "omError_FreedAddr",                   "addr had previosuly been freed"},
35  {omError_FreedAddrOrMemoryCorrupted,  "omError_FreedAddrOrMemoryCorrupted",  "addr had previosuly been freed  or memory corrupted"},
36  {omError_WrongBin,                    "omError_WrongBin",                    "wrong Bin specification for addr"},
37  {omError_UnknownBin,                  "omError_UnknownBin",                  "given Bin is unknown"},
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 
48  {omError_MaxError, NULL} /* this needs to be the last entry */
49};
50
51const char* omError2String(omError_t error)
52{
53  int i = 0;
54  while (! (om_ErrorStrings[i].string == NULL && om_ErrorStrings[i].error == omError_MaxError))
55  {
56    if (om_ErrorStrings[i].error == error) return om_ErrorStrings[i].string;
57    i++;
58  }
59  return "undocumented error";
60}
61
62const char* omError2Serror(omError_t error)
63{
64  int i = 0;
65  while (! (om_ErrorStrings[i].string == NULL && om_ErrorStrings[i].error == omError_MaxError))
66  {
67    if (om_ErrorStrings[i].error == error) return om_ErrorStrings[i].s_error;
68    i++;
69  }
70  return "omError_UnKnown";
71}
72
73omError_t omReportError(omError_t error, omError_t report_error, OM_FLR_DECL, 
74                        const char* fmt, ...)
75{
76  if (report_error == omError_MaxError) return error;
77  om_InternalErrorStatus = error;
78  om_ErrorStatus = (report_error == omError_NoError ? error : report_error);
79
80  if (om_Opts.HowToReportErrors && om_ErrorStatus != omError_NoError)
81  {
82    fprintf(stderr, "***%s: %s", omError2Serror(om_ErrorStatus), omError2String(om_ErrorStatus));
83   
84#ifdef OM_INTERNAL_DEBUG
85    if (om_ErrorStatus != error)
86      fprintf(stderr, "\n___%s: %s", omError2Serror(error), omError2String(error));
87#endif
88
89    if (om_Opts.HowToReportErrors > 2 && fmt != NULL && *fmt != '\0')
90    {
91      va_list ap;
92      va_start(ap, fmt);
93      fprintf(stderr, ": ");
94      vfprintf(stderr, fmt, ap);
95      va_end(ap);
96    }
97
98    if (om_Opts.HowToReportErrors > 1)
99    {
100#ifndef OM_NDEBUG
101      fprintf(stderr, "\n occured at: ");
102      if (! _omPrintCurrentBackTrace(stderr, OM_FLR_VAL)) 
103        fprintf(stderr, " ??");
104#endif
105    }
106    fprintf(stderr, "\n");
107    fflush(stderr);
108  }
109  return error;
110}
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133               
Note: See TracBrowser for help on using the repository browser.