/tags/ttn-pre-libtool-1-4-3-upgrade/SWIG/Source/Swig/error.c
C | 198 lines | 112 code | 27 blank | 59 comment | 29 complexity | 3cab603a7051619ed3c2b9ea5d37b36e MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
- /* -----------------------------------------------------------------------------
- * error.c
- *
- * Error handling functions. These are used to issue warnings and
- * error messages.
- *
- * Author(s) : David Beazley (beazley@cs.uchicago.edu)
- *
- * Copyright (C) 1999-2000. The University of Chicago
- * See the file LICENSE for information on usage and redistribution.
- * ----------------------------------------------------------------------------- */
- #include "swig.h"
- #include <stdarg.h>
- #include <ctype.h>
- static char cvsroot[] = "$Header$";
- /* -----------------------------------------------------------------------------
- * Commentary on the warning filter.
- *
- * The warning filter is a string of numbers prefaced by (-) or (+) to
- * indicate whether or not a warning message is displayed. For example:
- *
- * "-304-201-140+210+201"
- *
- * The filter string is scanned left to right and the first occurrence
- * of a warning number is used to determine printing behavior.
- *
- * The same number may appear more than once in the string. For example, in the
- * above string, "201" appears twice. This simply means that warning 201
- * was disabled after it was previously enabled. This may only be temporary
- * setting--the first number may be removed later in which case the warning
- * is reenabled.
- * ----------------------------------------------------------------------------- */
- static int silence = 0; /* Silent operation */
- static String *filter = 0; /* Warning filter */
- static int warnall = 0;
- static int nwarning = 0;
- /* -----------------------------------------------------------------------------
- * Swig_warning()
- *
- * Issue a warning message
- * ----------------------------------------------------------------------------- */
- void
- Swig_warning(int wnum, const String_or_char *filename, int line, const char *fmt, ...) {
- String *out;
- char *msg;
- int wrn = 1;
- va_list ap;
- if (silence) return;
-
- va_start(ap,fmt);
- out = NewString("");
- vPrintf(out,fmt,ap);
- {
- char temp[64], *t;
- t = temp;
- msg = Char(out);
- while (isdigit(*msg)) {
- *(t++) = *(msg++);
- }
- if (t != temp) {
- msg++;
- wnum = atoi(temp);
- }
- }
- /* Check in the warning filter */
- if (filter) {
- char temp[32];
- char *c;
- sprintf(temp,"%d",wnum);
- c = Strstr(filter,temp);
- if (c) {
- if (*(c-1) == '-') wrn = 0; /* Warning disabled */
- if (*(c-1) == '+') wrn = 1; /* Warning enabled */
- }
- }
- if (warnall || wrn) {
- if (wnum) {
- Printf(stderr,"%s:%d: Warning(%d): ", filename, line, wnum);
- } else {
- Printf(stderr,"%s:%d: Warning: ", filename, line, wnum);
- }
- Printf(stderr,"%s",msg);
- nwarning++;
- }
- Delete(out);
- va_end(ap);
- }
- /* -----------------------------------------------------------------------------
- * Swig_error()
- *
- * Issue an error message
- * ----------------------------------------------------------------------------- */
- static int nerrors = 0;
- void
- Swig_error(const String_or_char *filename, int line, const char *fmt, ...) {
- va_list ap;
- if (silence) return;
- va_start(ap,fmt);
- if (line > 0) {
- Printf(stderr,"%s:%d: ", filename, line);
- } else {
- Printf(stderr,"%s:EOF: ", filename);
- }
- vPrintf(stderr,fmt,ap);
- va_end(ap);
- nerrors++;
- }
- /* -----------------------------------------------------------------------------
- * Swig_error_count()
- *
- * Returns number of errors received.
- * ----------------------------------------------------------------------------- */
- int
- Swig_error_count(void) {
- return nerrors;
- }
- /* -----------------------------------------------------------------------------
- * Swig_error_silent()
- *
- * Set silent flag
- * ----------------------------------------------------------------------------- */
- void
- Swig_error_silent(int s) {
- silence = s;
- }
- /* -----------------------------------------------------------------------------
- * Swig_warnfilter()
- *
- * Takes a comma separate list of warning numbers and puts in the filter.
- * ----------------------------------------------------------------------------- */
- void
- Swig_warnfilter(const String_or_char *wlist, int add) {
- char *c;
- String *s;
- if (!filter) filter = NewString("");
- s = NewString(wlist);
- c = Char(s);
- c = strtok(c,", ");
- while (c) {
- if (isdigit(*c) || (*c == '+') || (*c == '-')) {
- if (add) {
- Insert(filter,0,c);
- if (isdigit(*c)) {
- Insert(filter,0,"-");
- }
- } else {
- char temp[32];
- if (isdigit(*c)) {
- sprintf(temp,"-%s",c);
- } else {
- strcpy(temp,c);
- }
- Replace(filter,temp,"", DOH_REPLACE_FIRST);
- }
- }
- c = strtok(NULL,", ");
- }
- Delete(s);
- }
- void
- Swig_warnall(void) {
- warnall = 1;
- }
- /* -----------------------------------------------------------------------------
- * Swig_warn_count()
- *
- * Return the number of warnings
- * ----------------------------------------------------------------------------- */
- int
- Swig_warn_count(void) {
- return nwarning;
- }