00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifdef HAVE_CONFIG_H
00021 # include <config.h>
00022 #endif
00023
00024 #include <stdarg.h>
00025 #include <stdio.h>
00026 #include <stdlib.h>
00027 #include <stdarg.h>
00028 #include <unistd.h>
00029
00030 #include <glib.h>
00031
00032 #include "util.h"
00033 #include "error.h"
00034
00035 #ifdef WITH_DMALLOC
00036 # include <dmalloc.h>
00037 #endif
00038
00039
00040 static void defaultErrorFunc(const char* string, const char* filename, const char* function, int lineno);
00041 static int defaultPromptFunc(const char * title, const char* msg, int nTotal, int nDefault, const char *choice1, va_list args);
00042
00043 static UErrorFunc errorFunc_global = defaultErrorFunc;
00044 static UPromptFunc promptFunc_global = defaultPromptFunc;
00045
00065 void
00066 lutil_error_setErrorFunc(UErrorFunc errorFunc) {
00067 errorFunc_global = errorFunc;
00068 }
00069
00085 void
00086 lutil_error_setPromptFunc(UPromptFunc promptFunc) {
00087 promptFunc_global = promptFunc;
00088 }
00089
00090 void
00091 lutil_error_resetErrorFunc(void) {
00092 errorFunc_global = defaultErrorFunc;
00093 }
00094
00095 void
00096 lutil_error_resetPromptFunc(void) {
00097 promptFunc_global = defaultPromptFunc;
00098 }
00099
00110 void
00111 lutil_error_fatal(const char* string, const char* filename, const char* function, int lineno) {
00112 fprintf(stderr, "***FATAL***\n");
00113 fprintf(stderr, "%s\n", string);
00114 exit(1);
00115 }
00116
00130 int
00131 lutil_error_prompt(const char* title, const char* msg, int nTotal, int nDefault, const char *choice1, ...) {
00132 va_list ap;
00133 int result;
00134
00135 va_start(ap, choice1);
00136 result = promptFunc_global(title, msg, nTotal, nDefault, choice1, ap);
00137 va_end(ap);
00138
00139 return result;
00140 }
00141
00158 void
00159 lutil_error(const char* filename, const char* function, int lineno, const char* template, ...) {
00160 va_list ap;
00161 char* str;
00162
00163 va_start (ap, template);
00164 str = lutil_valistToString(template, ap);
00165 va_end (ap);
00166
00167 errorFunc_global(str, filename, function, lineno);
00168
00169 g_free(str);
00170 }
00171
00172
00173
00174
00175 static void
00176 defaultErrorFunc(const char* string, const char* filename, const char* function, int lineno) {
00177 fprintf(stderr, "*** ERROR ***\n");
00178 fprintf(stderr, "luau: %s: %s: %s\n", filename, function, string);
00179 }
00180
00181 static int
00182 defaultPromptFunc(const char * title, const char* msg, int nTotal, int nDefault, const char *choice1, va_list args) {
00183 return nDefault;
00184 }
00185