00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifdef GENERATOR_FILE
00027 #include "bconfig.h"
00028 #else
00029 #include "config.h"
00030 #endif
00031 #include "system.h"
00032 #include "errors.h"
00033
00034
00035
00036 const char *progname;
00037
00038
00039
00040 int have_error = 0;
00041
00042
00043
00044 void
00045 warning (const char *format, ...)
00046 {
00047 va_list ap;
00048
00049 va_start (ap, format);
00050 fprintf (stderr, "%s: warning: ", progname);
00051 vfprintf (stderr, format, ap);
00052 va_end (ap);
00053 fputc('\n', stderr);
00054 }
00055
00056
00057
00058
00059 void
00060 error (const char *format, ...)
00061 {
00062 va_list ap;
00063
00064 va_start (ap, format);
00065 fprintf (stderr, "%s: ", progname);
00066 vfprintf (stderr, format, ap);
00067 va_end (ap);
00068 fputc('\n', stderr);
00069
00070 have_error = 1;
00071 }
00072
00073
00074
00075
00076 void
00077 fatal (const char *format, ...)
00078 {
00079 va_list ap;
00080
00081 va_start (ap, format);
00082 fprintf (stderr, "%s: ", progname);
00083 vfprintf (stderr, format, ap);
00084 va_end (ap);
00085 fputc('\n', stderr);
00086 exit (FATAL_EXIT_CODE);
00087 }
00088
00089
00090
00091 void
00092 internal_error (const char *format, ...)
00093 {
00094 va_list ap;
00095
00096 va_start (ap, format);
00097 fprintf (stderr, "%s: Internal error: ", progname);
00098 vfprintf (stderr, format, ap);
00099 va_end (ap);
00100 fputc ('\n', stderr);
00101 exit (FATAL_EXIT_CODE);
00102 }
00103
00104
00105
00106
00107
00108
00109
00110 const char *
00111 trim_filename (const char *name)
00112 {
00113 static const char this_file[] = __FILE__;
00114 const char *p = name, *q = this_file;
00115
00116
00117 while (*p == *q && *p != 0 && *q != 0)
00118 p++, q++;
00119
00120
00121 while (p > name && !IS_DIR_SEPARATOR (p[-1]))
00122 p--;
00123
00124 return p;
00125 }
00126
00127
00128
00129
00130 void
00131 fancy_abort (const char *file, int line, const char *func)
00132 {
00133 internal_error ("abort in %s, at %s:%d", func, trim_filename (file), line);
00134 }