void dbg_outputW(const WCHAR* buffer, int len) { char* ansi = NULL; int newlen; /* do a serious Unicode to ANSI conversion * FIXME: should CP_ACP be GetConsoleCP()? */ newlen = WideCharToMultiByte(CP_ACP, 0, buffer, len, NULL, 0, NULL, NULL); if (newlen) { if (!(ansi = HeapAlloc(GetProcessHeap(), 0, newlen))) return; WideCharToMultiByte(CP_ACP, 0, buffer, len, ansi, newlen, NULL, NULL); dbg_outputA(ansi, newlen); HeapFree(GetProcessHeap(), 0, ansi); } }
int dbg_printf(const char* format, ...) { static char buf[4*1024]; va_list valist; int len; va_start(valist, format); len = vsnprintf(buf, sizeof(buf), format, valist); va_end(valist); if (len <= -1 || len >= sizeof(buf)) { len = sizeof(buf) - 1; buf[len] = 0; buf[len - 1] = buf[len - 2] = buf[len - 3] = '.'; } dbg_outputA(buf, len); return len; }
void dbg_outputW(const WCHAR* buffer, int len) { const char* ansi = dbg_W2A(buffer, len); if (ansi) dbg_outputA(ansi, strlen(ansi)); /* FIXME: should CP_ACP be GetConsoleCP()? */ }