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
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044 #include <stdio.h>
00045 #include <stdlib.h>
00046 #include <string.h>
00047 #include <windows.h>
00048 #include <assert.h>
00049
00050 #include "err.h"
00051 #include "ckd_alloc.h"
00052
00053 int cst_verrmsg(const char *fmt, va_list args)
00054 {
00055 char msg[256];
00056 WCHAR *wmsg;
00057 size_t len;
00058
00059 _vsnprintf(msg,256,fmt,args);
00060
00061 len = mbstowcs(NULL,msg,0) + 1;
00062 wmsg = ckd_calloc(len,sizeof(*wmsg));
00063 mbstowcs(wmsg,msg,len);
00064
00065 OutputDebugStringW(wmsg);
00066 ckd_free(wmsg);
00067 return 0;
00068 }
00069
00070 int cst_errmsg(const char *fmt, ...)
00071 {
00072 va_list args;
00073
00074 va_start(args,fmt);
00075 cst_verrmsg(fmt, args);
00076 va_end(args);
00077 return 0;
00078 }
00079
00080 void
00081 _E__pr_info_header_wofn(char const *msg)
00082 {
00083 cst_errmsg("%s:\t", msg);
00084 }
00085
00086 void
00087 _E__pr_header(char const *f, long ln, char const *msg)
00088 {
00089 cst_errmsg("%s: \"%s\", line %ld: ", msg, f, ln);
00090 }
00091
00092 void
00093 _E__pr_info_header(char const *f, long ln, char const *msg)
00094 {
00095 cst_errmsg("%s: %s(%ld): ", msg, f, ln);
00096 }
00097
00098 void
00099 _E__pr_warn(char const *fmt, ...)
00100 {
00101 va_list pvar;
00102
00103 va_start(pvar, fmt);
00104 cst_verrmsg(fmt, pvar);
00105 va_end(pvar);
00106 }
00107
00108 void
00109 _E__pr_info(char const *fmt, ...)
00110 {
00111 va_list pvar;
00112
00113 va_start(pvar, fmt);
00114 cst_verrmsg(fmt, pvar);
00115 va_end(pvar);
00116 }
00117
00118 void
00119 _E__die_error(char const *fmt, ...)
00120 {
00121 va_list pvar;
00122
00123 va_start(pvar, fmt);
00124 cst_verrmsg(fmt, pvar);
00125 va_end(pvar);
00126 exit(-1);
00127 }
00128
00129 void
00130 _E__fatal_sys_error(char const *fmt, ...)
00131 {
00132 LPVOID msg_buf;
00133 DWORD error;
00134 va_list pvar;
00135
00136 error = GetLastError();
00137 va_start(pvar, fmt);
00138 cst_verrmsg(fmt, pvar);
00139 va_end(pvar);
00140
00141 OutputDebugStringW(L"; ");
00142 FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
00143 FORMAT_MESSAGE_FROM_SYSTEM |
00144 FORMAT_MESSAGE_IGNORE_INSERTS,
00145 NULL,
00146 error,
00147 0,
00148 (LPTSTR) &msg_buf,
00149 0,
00150 NULL);
00151 OutputDebugString(msg_buf);
00152 LocalFree(msg_buf);
00153
00154 exit(error);
00155 }
00156
00157 void
00158 _E__sys_error(char const *fmt, ...)
00159 {
00160 LPVOID msg_buf;
00161 DWORD error;
00162 va_list pvar;
00163
00164 error = GetLastError();
00165 va_start(pvar, fmt);
00166 cst_verrmsg(fmt, pvar);
00167 va_end(pvar);
00168
00169 OutputDebugStringW(L"; ");
00170 FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
00171 FORMAT_MESSAGE_FROM_SYSTEM |
00172 FORMAT_MESSAGE_IGNORE_INSERTS,
00173 NULL,
00174 error,
00175 0,
00176 (LPTSTR) &msg_buf,
00177 0,
00178 NULL);
00179 OutputDebugString(msg_buf);
00180 LocalFree(msg_buf);
00181 }
00182
00183 void
00184 _E__abort_error(char const *fmt, ...)
00185 {
00186 va_list pvar;
00187
00188 va_start(pvar, fmt);
00189 cst_verrmsg(fmt, pvar);
00190 va_end(pvar);
00191
00192 assert(2+2 == 5);
00193 }