tom@tnosoes.UUCP (Tom Vijlbrief) (06/29/89)
Sun 3:
======================
g++ -c bug.c -finline-functions -v
g++ version 1.35.0
/usr/local/lib/gcc-cpp -+ -v -undef -D__GNU__ -D__GNUG__ -D__cplusplus -Dmc68000 -Dsun -Dunix -D__mc68000__ -D__sun__ -D__unix__ -D__HAVE_68881__ -Dmc68020 bug.c /tmp/cca08505.cpp
GNU CPP version 1.35
/usr/local/lib/gcc-cc1plus /tmp/cca08505.cpp -quiet -dumpbase bug.c -finline-functions -noreg -version -o /tmp/cca08505.s
GNU C++ version 1.35.0 (68k, MIT syntax) compiled by GNU C version 1.35.
In function void DefaultErrorHandler (int, enum bool, char *, char *):
bug.c:62: warning: implicit declaration of function `Abort'
In function void Error (char *, char *, ...):
bug.c:92: Segmentation violation
========Bug.c:============================
#include <stream.h>
#include <stdarg.h>
#ifndef Error_First
#define Error_First
static const int cWarning = 0,
cError = 1000,
cSysError = 2000,
cFatal = 3000;
typedef void (*ErrorHandlerFunc)(int level, bool abort, char *location, char *msg);
extern void ErrorHandler(int level, char *location, va_list va);
extern void Error(char *location, char *msgfmt, ...);
extern void SysError(char *location, char *msgfmt, ...);
extern void Warning(char *location, char *msgfmt, ...);
extern void Fatal(char *location, char *msgfmt, ...);
extern void AbstractMethod(char*);
extern void DefaultErrorHandler(int level, bool abort, char *location, char *msg);
ErrorHandlerFunc SetErrorHandler(ErrorHandlerFunc newhandler);
ErrorHandlerFunc GetErrorHandler();
int SetAbortLevel(int newlevel);
int GetAbortLevel();
int SetIgnoreLevel(int newlevel);
int GetIgnoreLevel();
extern void _exit(int code);
#endif Error_First
int gDebug= 0;
void AbstractMethod(char *s)
{
Warning(s, "abstract method called");
}
static int abortlevel= cSysError;
static int ignorelevel= cError;
void DefaultErrorHandler(int level, bool abort, char *location, char *msg)
{
char *type= "Warning";
if (level < ignorelevel)
return;
if (level >= cFatal)
type= "Fatal";
else if (level >= cSysError)
type= "SysError";
else if (level >= cError)
type= "Error";
fprintf(stderr, "%s in <%s>: %s\n", type, location, msg);
fflush(stderr);
if (abort) {
fprintf(stderr, "aborting\n");
fflush(stderr);
Abort();
}
}
static ErrorHandlerFunc errorhandler= DefaultErrorHandler;
void ErrorHandler(int level, char *location, va_list ap)
{
char buf[1024], *syserror= 0, buf3[1024], *bp;
char *fmt= va_arg(ap, char*);
vsprintf(buf, fmt, ap);
if (level >= cSysError && level < cFatal) {
if (errno < 0 || errno >= sys_nerr)
syserror= form("errno out of range %d", errno);
else
syserror= sys_errlist[errno];
}
if (syserror) {
sprintf(buf3, "%s (%s)", buf, syserror);
bp= buf3;
} else
bp= buf;
errorhandler(level, level >= abortlevel, location, bp);
}
void Error(char *location, char*, ...)
{
va_list ap;
va_start(ap, location);
ErrorHandler(cError, location, ap);
va_end(ap);
}
void SysError(char *location, char*, ...)
{
va_list ap;
va_start(ap, location);
ErrorHandler(cSysError, location, ap);
va_end(ap);
}
void Warning(char *location, char*, ...)
{
va_list ap;
va_start(ap, location);
ErrorHandler(cWarning, location, ap);
va_end(ap);
}
void Fatal(char *location, char*, ...)
{
va_list ap;
va_start(ap, location);
ErrorHandler(cFatal, location, ap);
va_end(ap);
}
ErrorHandlerFunc SetErrorHandler(ErrorHandlerFunc newhandler)
{
ErrorHandlerFunc oldhandler= errorhandler;
errorhandler= newhandler;
return oldhandler;
}
ErrorHandlerFunc GetErrorHandler()
{
return errorhandler;
}
int SetAbortLevel(int newlevel)
{
int oldlevel= abortlevel;
abortlevel= newlevel;
return oldlevel;
}
int GetAbortLevel()
{
return abortlevel;
}
int SetIgnoreLevel(int newlevel)
{
int oldlevel= abortlevel;
ignorelevel= newlevel;
return oldlevel;
}
int GetIgnoreLevel()
{
return ignorelevel;
}
========================
===============================================================================
Tom Vijlbrief
TNO Institute for Perception
P.O. Box 23 Phone: +31 34 63 562 11
3769 ZG Soesterberg E-mail: tnosoes!tom@mcvax.cwi.nl
The Netherlands or: uunet!mcvax!tnosoes!tom
===============================================================================