use stdarg when compiling with ANSI C compiler
This commit is contained in:
		
							parent
							
								
									7b207deeb7
								
							
						
					
					
						commit
						4c73887050
					
				
					 1 changed files with 249 additions and 21 deletions
				
			
		|  | @ -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	*/ | /*	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" | #include	"lint.h" | ||||||
|  | #if __STDC__ | ||||||
|  | #include	<stdarg.h> | ||||||
|  | #else | ||||||
| #include	<varargs.h> | #include	<varargs.h> | ||||||
|  | #endif | ||||||
| #include	<system.h> | #include	<system.h> | ||||||
| #ifndef	LINT | #ifndef	LINT | ||||||
| #include	<em.h> | #include	<em.h> | ||||||
|  | @ -60,6 +64,218 @@ extern char loptions[]; | ||||||
| 
 | 
 | ||||||
| static _error(); | 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*/ | /*VARARGS*/ | ||||||
| error(va_alist)				/* fmt, args */ | error(va_alist)				/* fmt, args */ | ||||||
| 	va_dcl | 	va_dcl | ||||||
|  | @ -68,7 +284,8 @@ error(va_alist)				/* fmt, args */ | ||||||
| 
 | 
 | ||||||
| 	va_start(ap); | 	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); | 	va_end(ap); | ||||||
| } | } | ||||||
|  | @ -82,10 +299,11 @@ expr_error(va_alist)			/* expr, fmt, args */ | ||||||
| 	va_start(ap); | 	va_start(ap); | ||||||
| 	{ | 	{ | ||||||
| 		register struct expr *expr = va_arg(ap, struct expr *); | 		register struct expr *expr = va_arg(ap, struct expr *); | ||||||
|  | 		char *fmt = va_arg(ap, char *); | ||||||
| 
 | 
 | ||||||
| 		if (!(expr->ex_flags & EX_ERROR)) { | 		if (!(expr->ex_flags & EX_ERROR)) { | ||||||
| 			/* to prevent proliferation */ | 			/* 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; | 			expr->ex_flags |= EX_ERROR; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | @ -100,7 +318,8 @@ lexstrict(va_alist) | ||||||
| 
 | 
 | ||||||
| 	va_start(ap); | 	va_start(ap); | ||||||
| 	{ | 	{ | ||||||
| 		_error(STRICT, FileName, LineNumber, ap); | 		char *fmt = va_arg(ap, char *); | ||||||
|  | 		_error(STRICT, FileName, LineNumber, fmt, ap); | ||||||
| 	} | 	} | ||||||
| 	va_end(ap); | 	va_end(ap); | ||||||
| } | } | ||||||
|  | @ -113,7 +332,8 @@ strict(va_alist) | ||||||
| 
 | 
 | ||||||
| 	va_start(ap); | 	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); | 	va_end(ap); | ||||||
| } | } | ||||||
|  | @ -127,10 +347,11 @@ expr_strict(va_alist)			/* expr, fmt, args */ | ||||||
| 	va_start(ap); | 	va_start(ap); | ||||||
| 	{ | 	{ | ||||||
| 		struct expr *expr = va_arg(ap, struct expr *); | 		struct expr *expr = va_arg(ap, struct expr *); | ||||||
|  | 		char *fmt = va_arg(ap, char *); | ||||||
| 
 | 
 | ||||||
| 		if (!(expr->ex_flags & EX_ERROR)) { | 		if (!(expr->ex_flags & EX_ERROR)) { | ||||||
| 			/* to prevent proliferation */ | 			/* 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); | 	va_end(ap); | ||||||
|  | @ -145,9 +366,8 @@ debug(va_alist) | ||||||
| 
 | 
 | ||||||
| 	va_start(ap); | 	va_start(ap); | ||||||
| 	{ | 	{ | ||||||
| 		_error(DO_DEBUG, dot.tk_file, dot.tk_line, ap); | 		char *fmt = va_arg(ap, char *); | ||||||
| 		/* _error(DO_DEBUG, NILEXPR, ap);
 | 		_error(DO_DEBUG, dot.tk_file, dot.tk_line, fmt, ap); | ||||||
| 		*/ |  | ||||||
| 	} | 	} | ||||||
| 	va_end(ap); | 	va_end(ap); | ||||||
| } | } | ||||||
|  | @ -161,9 +381,8 @@ warning(va_alist) | ||||||
| 
 | 
 | ||||||
| 	va_start(ap); | 	va_start(ap); | ||||||
| 	{ | 	{ | ||||||
| 		_error(WARNING, dot.tk_file, dot.tk_line, ap); | 		char *fmt = va_arg(ap, char *); | ||||||
| 		/* _error(WARNING, NILEXPR, ap);
 | 		_error(WARNING, dot.tk_file, dot.tk_line, fmt, ap); | ||||||
| 		*/ |  | ||||||
| 	} | 	} | ||||||
| 	va_end(ap); | 	va_end(ap); | ||||||
| } | } | ||||||
|  | @ -177,10 +396,11 @@ expr_warning(va_alist)			/* expr, fmt, args */ | ||||||
| 	va_start(ap); | 	va_start(ap); | ||||||
| 	{ | 	{ | ||||||
| 		struct expr *expr = va_arg(ap, struct expr *); | 		struct expr *expr = va_arg(ap, struct expr *); | ||||||
|  | 		char *fmt = va_arg(ap, char *); | ||||||
| 
 | 
 | ||||||
| 		if (!(expr->ex_flags & EX_ERROR)) { | 		if (!(expr->ex_flags & EX_ERROR)) { | ||||||
| 			/* to prevent proliferation */ | 			/* 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); | 	va_end(ap); | ||||||
|  | @ -197,8 +417,9 @@ def_warning(va_alist)			/* def, fmt, args */ | ||||||
| 	va_start(ap); | 	va_start(ap); | ||||||
| 	{ | 	{ | ||||||
| 		register struct def *def = va_arg(ap, struct def *); | 		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); | 	va_end(ap); | ||||||
| } | } | ||||||
|  | @ -212,8 +433,9 @@ hwarning(va_alist)			/* fmt, args */ | ||||||
| 
 | 
 | ||||||
| 	va_start(ap); | 	va_start(ap); | ||||||
| 	{ | 	{ | ||||||
|  | 		char *fmt = va_arg(ap, char *); | ||||||
| 		if (loptions['h']) | 		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); | 	va_end(ap); | ||||||
| } | } | ||||||
|  | @ -226,8 +448,9 @@ awarning(va_alist)			/* fmt, args */ | ||||||
| 
 | 
 | ||||||
| 	va_start(ap); | 	va_start(ap); | ||||||
| 	{ | 	{ | ||||||
|  | 		char *fmt = va_arg(ap, char *); | ||||||
| 		if (loptions['a']) | 		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); | 	va_end(ap); | ||||||
| } | } | ||||||
|  | @ -242,7 +465,8 @@ lexerror(va_alist)			/* fmt, args */ | ||||||
| 
 | 
 | ||||||
| 	va_start(ap); | 	va_start(ap); | ||||||
| 	{ | 	{ | ||||||
| 		_error(ERROR, FileName, LineNumber, ap); | 		char *fmt = va_arg(ap, char *); | ||||||
|  | 		_error(ERROR, FileName, LineNumber, fmt, ap); | ||||||
| 	} | 	} | ||||||
| 	va_end(ap); | 	va_end(ap); | ||||||
| } | } | ||||||
|  | @ -255,7 +479,8 @@ lexwarning(va_alist)			/* fmt, args */ | ||||||
| 
 | 
 | ||||||
| 	va_start(ap); | 	va_start(ap); | ||||||
| 	{ | 	{ | ||||||
| 		_error(WARNING, FileName, LineNumber, ap); | 		char *fmt = va_arg(ap, char *); | ||||||
|  | 		_error(WARNING, FileName, LineNumber, fmt, ap); | ||||||
| 	} | 	} | ||||||
| 	va_end(ap); | 	va_end(ap); | ||||||
| } | } | ||||||
|  | @ -268,7 +493,8 @@ crash(va_alist)				/* fmt, args */ | ||||||
| 
 | 
 | ||||||
| 	va_start(ap); | 	va_start(ap); | ||||||
| 	{ | 	{ | ||||||
| 		_error(CRASH, FileName, LineNumber, ap); | 		char *fmt = va_arg(ap, char *); | ||||||
|  | 		_error(CRASH, FileName, LineNumber, fmt, ap); | ||||||
| 	} | 	} | ||||||
| 	va_end(ap); | 	va_end(ap); | ||||||
| 
 | 
 | ||||||
|  | @ -289,7 +515,8 @@ fatal(va_alist)				/* fmt, args */ | ||||||
| 
 | 
 | ||||||
| 	va_start(ap); | 	va_start(ap); | ||||||
| 	{ | 	{ | ||||||
| 		_error(FATAL, FileName, LineNumber, ap); | 		char *fmt = va_arg(ap, char *); | ||||||
|  | 		_error(FATAL, FileName, LineNumber, fmt, ap); | ||||||
| 	} | 	} | ||||||
| 	va_end(ap); | 	va_end(ap); | ||||||
| 
 | 
 | ||||||
|  | @ -297,16 +524,17 @@ fatal(va_alist)				/* fmt, args */ | ||||||
| 	sys_stop(S_EXIT); | 	sys_stop(S_EXIT); | ||||||
| 	/*NOTREACHED*/ | 	/*NOTREACHED*/ | ||||||
| } | } | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| static | static | ||||||
| _error(class, fn, ln, ap) | _error(class, fn, ln, fmt, ap) | ||||||
| 	int class; | 	int class; | ||||||
| 	char *fn; | 	char *fn; | ||||||
| 	unsigned int ln; | 	unsigned int ln; | ||||||
|  | 	char *fmt; | ||||||
| 	va_list ap; | 	va_list ap; | ||||||
| { | { | ||||||
| 	char *remark; | 	char *remark; | ||||||
| 	char *fmt = va_arg(ap, char *); |  | ||||||
| 	 | 	 | ||||||
| 	/* check visibility of message */ | 	/* check visibility of message */ | ||||||
| 	switch (class)	{ | 	switch (class)	{ | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue