|
@@ -6,7 +6,11 @@
|
|
|
/* E R R O R A N D D I A G N O S T I C R O U T I N E S */
|
|
|
|
|
|
#include "lint.h"
|
|
|
+#if __STDC__
|
|
|
+#include <stdarg.h>
|
|
|
+#else
|
|
|
#include <varargs.h>
|
|
|
+#endif
|
|
|
#include <system.h>
|
|
|
#ifndef LINT
|
|
|
#include <em.h>
|
|
@@ -60,6 +64,218 @@ extern char loptions[];
|
|
|
|
|
|
static _error();
|
|
|
|
|
|
+#if __STDC__
|
|
|
+/*VARARGS*/
|
|
|
+error(char *fmt, ...)
|
|
|
+{
|
|
|
+ va_list ap;
|
|
|
+
|
|
|
+ va_start(ap, fmt);
|
|
|
+ {
|
|
|
+ _error(ERROR, dot.tk_file, dot.tk_line, fmt, ap);
|
|
|
+ }
|
|
|
+ va_end(ap);
|
|
|
+}
|
|
|
+
|
|
|
+/*VARARGS*/
|
|
|
+expr_error(struct expr *expr, char *fmt, ...)
|
|
|
+{
|
|
|
+ va_list ap;
|
|
|
+
|
|
|
+ va_start(ap, fmt);
|
|
|
+ {
|
|
|
+ if (!(expr->ex_flags & EX_ERROR)) {
|
|
|
+ /* to prevent proliferation */
|
|
|
+ _error(ERROR, expr->ex_file, expr->ex_line, fmt, ap);
|
|
|
+ expr->ex_flags |= EX_ERROR;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ va_end(ap);
|
|
|
+}
|
|
|
+
|
|
|
+/*VARARGS*/
|
|
|
+lexstrict(char *fmt, ...)
|
|
|
+{
|
|
|
+ va_list ap;
|
|
|
+
|
|
|
+ va_start(ap, fmt);
|
|
|
+ {
|
|
|
+ _error(STRICT, FileName, LineNumber, fmt, ap);
|
|
|
+ }
|
|
|
+ va_end(ap);
|
|
|
+}
|
|
|
+
|
|
|
+/*VARARGS*/
|
|
|
+strict(char *fmt, ...)
|
|
|
+{
|
|
|
+ va_list ap;
|
|
|
+
|
|
|
+ va_start(ap, fmt);
|
|
|
+ {
|
|
|
+ _error(STRICT, dot.tk_file, dot.tk_line, fmt, ap);
|
|
|
+ }
|
|
|
+ va_end(ap);
|
|
|
+}
|
|
|
+
|
|
|
+/*VARARGS*/
|
|
|
+expr_strict(struct expr *expr, char *fmt, ...)
|
|
|
+{
|
|
|
+ va_list ap;
|
|
|
+
|
|
|
+ va_start(ap, fmt);
|
|
|
+ {
|
|
|
+ if (!(expr->ex_flags & EX_ERROR)) {
|
|
|
+ /* to prevent proliferation */
|
|
|
+ _error(STRICT, expr->ex_file, expr->ex_line, fmt, ap);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ va_end(ap);
|
|
|
+}
|
|
|
+
|
|
|
+#ifdef DEBUG
|
|
|
+/*VARARGS*/
|
|
|
+debug(char *fmt, ...)
|
|
|
+{
|
|
|
+ va_list ap;
|
|
|
+
|
|
|
+ va_start(ap, fmt);
|
|
|
+ {
|
|
|
+ _error(DO_DEBUG, dot.tk_file, dot.tk_line, fmt, ap);
|
|
|
+ }
|
|
|
+ va_end(ap);
|
|
|
+}
|
|
|
+#endif /* DEBUG */
|
|
|
+
|
|
|
+/*VARARGS*/
|
|
|
+warning(char *fmt, ...)
|
|
|
+{
|
|
|
+ va_list ap;
|
|
|
+
|
|
|
+ va_start(ap, fmt);
|
|
|
+ {
|
|
|
+ _error(WARNING, dot.tk_file, dot.tk_line, fmt, ap);
|
|
|
+ }
|
|
|
+ va_end(ap);
|
|
|
+}
|
|
|
+
|
|
|
+/*VARARGS*/
|
|
|
+expr_warning(struct expr *expr, char *fmt, ...)
|
|
|
+{
|
|
|
+ va_list ap;
|
|
|
+
|
|
|
+ va_start(ap, fmt);
|
|
|
+ {
|
|
|
+ if (!(expr->ex_flags & EX_ERROR)) {
|
|
|
+ /* to prevent proliferation */
|
|
|
+ _error(WARNING, expr->ex_file, expr->ex_line, fmt, ap);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ va_end(ap);
|
|
|
+}
|
|
|
+
|
|
|
+#ifdef LINT
|
|
|
+
|
|
|
+/*VARARGS*/
|
|
|
+def_warning(struct def *def, char *fmt, ...)
|
|
|
+{
|
|
|
+ va_list ap;
|
|
|
+
|
|
|
+ va_start(ap, fmt);
|
|
|
+ {
|
|
|
+ _error(WARNING, def->df_file, def->df_line, fmt, ap);
|
|
|
+ }
|
|
|
+ va_end(ap);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/*VARARGS*/
|
|
|
+hwarning(char *fmt, ...)
|
|
|
+{
|
|
|
+ va_list ap;
|
|
|
+
|
|
|
+ va_start(ap, fmt);
|
|
|
+ {
|
|
|
+ if (loptions['h'])
|
|
|
+ _error(WARNING, dot.tk_file, dot.tk_line, fmt, ap);
|
|
|
+ }
|
|
|
+ va_end(ap);
|
|
|
+}
|
|
|
+
|
|
|
+/*VARARGS*/
|
|
|
+awarning(char *fmt, ...)
|
|
|
+{
|
|
|
+ va_list ap;
|
|
|
+
|
|
|
+ va_start(ap, fmt);
|
|
|
+ {
|
|
|
+ if (loptions['a'])
|
|
|
+ _error(WARNING, dot.tk_file, dot.tk_line, fmt, ap);
|
|
|
+ }
|
|
|
+ va_end(ap);
|
|
|
+}
|
|
|
+
|
|
|
+#endif /* LINT */
|
|
|
+
|
|
|
+/*VARARGS*/
|
|
|
+lexerror(char *fmt, ...)
|
|
|
+{
|
|
|
+ va_list ap;
|
|
|
+
|
|
|
+ va_start(ap, fmt);
|
|
|
+ {
|
|
|
+ _error(ERROR, FileName, LineNumber, fmt, ap);
|
|
|
+ }
|
|
|
+ va_end(ap);
|
|
|
+}
|
|
|
+
|
|
|
+/*VARARGS*/
|
|
|
+lexwarning(char *fmt, ...)
|
|
|
+{
|
|
|
+ va_list ap;
|
|
|
+
|
|
|
+ va_start(ap, fmt);
|
|
|
+ {
|
|
|
+ _error(WARNING, FileName, LineNumber, fmt, ap);
|
|
|
+ }
|
|
|
+ va_end(ap);
|
|
|
+}
|
|
|
+
|
|
|
+/*VARARGS*/
|
|
|
+crash(char *fmt, ...)
|
|
|
+{
|
|
|
+ va_list ap;
|
|
|
+
|
|
|
+ va_start(ap, fmt);
|
|
|
+ {
|
|
|
+ _error(CRASH, FileName, LineNumber, fmt, ap);
|
|
|
+ }
|
|
|
+ va_end(ap);
|
|
|
+
|
|
|
+ C_close();
|
|
|
+#ifdef DEBUG
|
|
|
+ sys_stop(S_ABORT);
|
|
|
+#else /* DEBUG */
|
|
|
+ sys_stop(S_EXIT);
|
|
|
+#endif /* DEBUG */
|
|
|
+ /* NOTREACHED */
|
|
|
+}
|
|
|
+
|
|
|
+/*VARARGS*/
|
|
|
+fatal(char *fmt, ...)
|
|
|
+{
|
|
|
+ va_list ap;
|
|
|
+
|
|
|
+ va_start(ap, fmt);
|
|
|
+ {
|
|
|
+ _error(FATAL, FileName, LineNumber, fmt, ap);
|
|
|
+ }
|
|
|
+ va_end(ap);
|
|
|
+
|
|
|
+ if (C_busy()) C_close();
|
|
|
+ sys_stop(S_EXIT);
|
|
|
+ /*NOTREACHED*/
|
|
|
+}
|
|
|
+#else
|
|
|
/*VARARGS*/
|
|
|
error(va_alist) /* fmt, args */
|
|
|
va_dcl
|
|
@@ -68,7 +284,8 @@ error(va_alist) /* fmt, args */
|
|
|
|
|
|
va_start(ap);
|
|
|
{
|
|
|
- _error(ERROR, dot.tk_file, dot.tk_line, ap);
|
|
|
+ char *fmt = va_arg(ap, char *);
|
|
|
+ _error(ERROR, dot.tk_file, dot.tk_line, fmt, ap);
|
|
|
}
|
|
|
va_end(ap);
|
|
|
}
|
|
@@ -82,10 +299,11 @@ expr_error(va_alist) /* expr, fmt, args */
|
|
|
va_start(ap);
|
|
|
{
|
|
|
register struct expr *expr = va_arg(ap, struct expr *);
|
|
|
+ char *fmt = va_arg(ap, char *);
|
|
|
|
|
|
if (!(expr->ex_flags & EX_ERROR)) {
|
|
|
/* to prevent proliferation */
|
|
|
- _error(ERROR, expr->ex_file, expr->ex_line, ap);
|
|
|
+ _error(ERROR, expr->ex_file, expr->ex_line, fmt, ap);
|
|
|
expr->ex_flags |= EX_ERROR;
|
|
|
}
|
|
|
}
|
|
@@ -100,7 +318,8 @@ lexstrict(va_alist)
|
|
|
|
|
|
va_start(ap);
|
|
|
{
|
|
|
- _error(STRICT, FileName, LineNumber, ap);
|
|
|
+ char *fmt = va_arg(ap, char *);
|
|
|
+ _error(STRICT, FileName, LineNumber, fmt, ap);
|
|
|
}
|
|
|
va_end(ap);
|
|
|
}
|
|
@@ -113,7 +332,8 @@ strict(va_alist)
|
|
|
|
|
|
va_start(ap);
|
|
|
{
|
|
|
- _error(STRICT, dot.tk_file, dot.tk_line, ap);
|
|
|
+ char *fmt = va_arg(ap, char *);
|
|
|
+ _error(STRICT, dot.tk_file, dot.tk_line, fmt, ap);
|
|
|
}
|
|
|
va_end(ap);
|
|
|
}
|
|
@@ -127,10 +347,11 @@ expr_strict(va_alist) /* expr, fmt, args */
|
|
|
va_start(ap);
|
|
|
{
|
|
|
struct expr *expr = va_arg(ap, struct expr *);
|
|
|
+ char *fmt = va_arg(ap, char *);
|
|
|
|
|
|
if (!(expr->ex_flags & EX_ERROR)) {
|
|
|
/* to prevent proliferation */
|
|
|
- _error(STRICT, expr->ex_file, expr->ex_line, ap);
|
|
|
+ _error(STRICT, expr->ex_file, expr->ex_line, fmt, ap);
|
|
|
}
|
|
|
}
|
|
|
va_end(ap);
|
|
@@ -145,9 +366,8 @@ debug(va_alist)
|
|
|
|
|
|
va_start(ap);
|
|
|
{
|
|
|
- _error(DO_DEBUG, dot.tk_file, dot.tk_line, ap);
|
|
|
- /* _error(DO_DEBUG, NILEXPR, ap);
|
|
|
- */
|
|
|
+ char *fmt = va_arg(ap, char *);
|
|
|
+ _error(DO_DEBUG, dot.tk_file, dot.tk_line, fmt, ap);
|
|
|
}
|
|
|
va_end(ap);
|
|
|
}
|
|
@@ -161,9 +381,8 @@ warning(va_alist)
|
|
|
|
|
|
va_start(ap);
|
|
|
{
|
|
|
- _error(WARNING, dot.tk_file, dot.tk_line, ap);
|
|
|
- /* _error(WARNING, NILEXPR, ap);
|
|
|
- */
|
|
|
+ char *fmt = va_arg(ap, char *);
|
|
|
+ _error(WARNING, dot.tk_file, dot.tk_line, fmt, ap);
|
|
|
}
|
|
|
va_end(ap);
|
|
|
}
|
|
@@ -177,10 +396,11 @@ expr_warning(va_alist) /* expr, fmt, args */
|
|
|
va_start(ap);
|
|
|
{
|
|
|
struct expr *expr = va_arg(ap, struct expr *);
|
|
|
+ char *fmt = va_arg(ap, char *);
|
|
|
|
|
|
if (!(expr->ex_flags & EX_ERROR)) {
|
|
|
/* to prevent proliferation */
|
|
|
- _error(WARNING, expr->ex_file, expr->ex_line, ap);
|
|
|
+ _error(WARNING, expr->ex_file, expr->ex_line, fmt, ap);
|
|
|
}
|
|
|
}
|
|
|
va_end(ap);
|
|
@@ -197,8 +417,9 @@ def_warning(va_alist) /* def, fmt, args */
|
|
|
va_start(ap);
|
|
|
{
|
|
|
register struct def *def = va_arg(ap, struct def *);
|
|
|
+ char *fmt = va_arg(ap, char *);
|
|
|
|
|
|
- _error(WARNING, def->df_file, def->df_line, ap);
|
|
|
+ _error(WARNING, def->df_file, def->df_line, fmt, ap);
|
|
|
}
|
|
|
va_end(ap);
|
|
|
}
|
|
@@ -212,8 +433,9 @@ hwarning(va_alist) /* fmt, args */
|
|
|
|
|
|
va_start(ap);
|
|
|
{
|
|
|
+ char *fmt = va_arg(ap, char *);
|
|
|
if (loptions['h'])
|
|
|
- _error(WARNING, dot.tk_file, dot.tk_line, ap);
|
|
|
+ _error(WARNING, dot.tk_file, dot.tk_line, fmt, ap);
|
|
|
}
|
|
|
va_end(ap);
|
|
|
}
|
|
@@ -226,8 +448,9 @@ awarning(va_alist) /* fmt, args */
|
|
|
|
|
|
va_start(ap);
|
|
|
{
|
|
|
+ char *fmt = va_arg(ap, char *);
|
|
|
if (loptions['a'])
|
|
|
- _error(WARNING, dot.tk_file, dot.tk_line, ap);
|
|
|
+ _error(WARNING, dot.tk_file, dot.tk_line, fmt, ap);
|
|
|
}
|
|
|
va_end(ap);
|
|
|
}
|
|
@@ -242,7 +465,8 @@ lexerror(va_alist) /* fmt, args */
|
|
|
|
|
|
va_start(ap);
|
|
|
{
|
|
|
- _error(ERROR, FileName, LineNumber, ap);
|
|
|
+ char *fmt = va_arg(ap, char *);
|
|
|
+ _error(ERROR, FileName, LineNumber, fmt, ap);
|
|
|
}
|
|
|
va_end(ap);
|
|
|
}
|
|
@@ -255,7 +479,8 @@ lexwarning(va_alist) /* fmt, args */
|
|
|
|
|
|
va_start(ap);
|
|
|
{
|
|
|
- _error(WARNING, FileName, LineNumber, ap);
|
|
|
+ char *fmt = va_arg(ap, char *);
|
|
|
+ _error(WARNING, FileName, LineNumber, fmt, ap);
|
|
|
}
|
|
|
va_end(ap);
|
|
|
}
|
|
@@ -268,7 +493,8 @@ crash(va_alist) /* fmt, args */
|
|
|
|
|
|
va_start(ap);
|
|
|
{
|
|
|
- _error(CRASH, FileName, LineNumber, ap);
|
|
|
+ char *fmt = va_arg(ap, char *);
|
|
|
+ _error(CRASH, FileName, LineNumber, fmt, ap);
|
|
|
}
|
|
|
va_end(ap);
|
|
|
|
|
@@ -289,7 +515,8 @@ fatal(va_alist) /* fmt, args */
|
|
|
|
|
|
va_start(ap);
|
|
|
{
|
|
|
- _error(FATAL, FileName, LineNumber, ap);
|
|
|
+ char *fmt = va_arg(ap, char *);
|
|
|
+ _error(FATAL, FileName, LineNumber, fmt, ap);
|
|
|
}
|
|
|
va_end(ap);
|
|
|
|
|
@@ -297,16 +524,17 @@ fatal(va_alist) /* fmt, args */
|
|
|
sys_stop(S_EXIT);
|
|
|
/*NOTREACHED*/
|
|
|
}
|
|
|
+#endif
|
|
|
|
|
|
static
|
|
|
-_error(class, fn, ln, ap)
|
|
|
+_error(class, fn, ln, fmt, ap)
|
|
|
int class;
|
|
|
char *fn;
|
|
|
unsigned int ln;
|
|
|
+ char *fmt;
|
|
|
va_list ap;
|
|
|
{
|
|
|
char *remark;
|
|
|
- char *fmt = va_arg(ap, char *);
|
|
|
|
|
|
/* check visibility of message */
|
|
|
switch (class) {
|