Convert debug_printf to take UTF-8 strings instead of wchar_t.

This fixes the problem where passing a non-ASCII string to
debug_printf(L"%hs", s) caused vswprintf_s to fail on Linux (because it
doesn't know what encoding the char* is meant to have). Now debug
messages will remain as UTF-8 until they reach the OS.

Fixes #3021.

This was SVN commit r16332.
This commit is contained in:
Ykkrosh 2015-02-14 01:45:13 +00:00
parent bf4b8bfe9c
commit e06a7b37d8
68 changed files with 232 additions and 229 deletions

View File

@ -52,7 +52,7 @@ CCinemaPath::CCinemaPath(const CCinemaData& data, const TNSpline& spline)
DistModePtr = &CCinemaPath::EaseOutIn;
break;
default:
debug_printf(L"Cinematic mode not found for %d ", data.m_Mode);
debug_printf("Cinematic mode not found for %d ", data.m_Mode);
break;
}
@ -74,7 +74,7 @@ CCinemaPath::CCinemaPath(const CCinemaData& data, const TNSpline& spline)
DistStylePtr = &CCinemaPath::EaseSine;
break;
default:
debug_printf(L"Cinematic mode not found for %d !", data.m_Style);
debug_printf("Cinematic mode not found for %d !", data.m_Style);
break;
}
//UpdateDuration();

View File

@ -90,6 +90,6 @@ void ColorActivateFastImpl()
#endif
else
{
debug_printf(L"No SSE available. Slow fallback routines will be used.\n");
debug_printf("No SSE available. Slow fallback routines will be used.\n");
}
}

View File

@ -1140,7 +1140,7 @@ void CXMLReader::ReadXML()
}
else
{
debug_printf(L"Invalid XML element in map file: %hs\n", name.c_str());
debug_printf("Invalid XML element in map file: %s\n", name.c_str());
debug_warn(L"Invalid map XML data");
}
}

View File

@ -108,7 +108,7 @@ void CTextRenderer::PrintfAdvance(const wchar_t* fmt, ...)
va_end(args);
if (ret < 0)
debug_printf(L"CTextRenderer::Printf vswprintf failed (buffer size exceeded?) - return value %d, errno %d\n", ret, errno);
debug_printf("CTextRenderer::Printf vswprintf failed (buffer size exceeded?) - return value %d, errno %d\n", ret, errno);
PutAdvance(buf);
}
@ -124,7 +124,7 @@ void CTextRenderer::PrintfAt(float x, float y, const wchar_t* fmt, ...)
va_end(args);
if (ret < 0)
debug_printf(L"CTextRenderer::PrintfAt vswprintf failed (buffer size exceeded?) - return value %d, errno %d\n", ret, errno);
debug_printf("CTextRenderer::PrintfAt vswprintf failed (buffer size exceeded?) - return value %d, errno %d\n", ret, errno);
Put(x, y, buf);
}

View File

@ -993,7 +993,7 @@ void CGUI::Xeromyces_ReadRootObjects(XMBElement Element, CXeromyces* pFile, boos
XMBElementList children = Element.GetChildNodes();
for (int i=0; i<children.Count; ++i)
{
//debug_printf(L"Object %d\n", i);
//debug_printf("Object %d\n", i);
XMBElement child = children.Item(i);
if (child.GetNodeName() == el_script)

View File

@ -150,7 +150,7 @@ InReaction CInput::ManuallyHandleEvent(const SDL_Event_* ev)
int rawLength = strlen(rawText);
std::wstring wtext = wstring_from_utf8(rawText);
debug_printf(L"SDL_TEXTEDITING: text=%hs, start=%d, length=%d\n", rawText, ev->ev.edit.start, ev->ev.edit.length);
debug_printf("SDL_TEXTEDITING: text=%s, start=%d, length=%d\n", rawText, ev->ev.edit.start, ev->ev.edit.length);
m_WantedX=0.0f;
if (SelectingText())

View File

@ -612,7 +612,7 @@ void SetCameraTarget(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), float x, fl
// Useful for testing the crashlog/stack trace code.
int Crash(ScriptInterface::CxPrivate* UNUSED(pCxPrivate))
{
debug_printf(L"Crashing at user's request.\n");
debug_printf("Crashing at user's request.\n");
return *(volatile int*)0;
}

View File

@ -112,7 +112,7 @@ Status da_set_size(DynArray* da, size_t new_size)
{
ok = vm::Commit(uintptr_t(end), size_delta_pa);
if(!ok)
debug_printf(L"Commit failed (%p %lld)\n", end, (long long)size_delta_pa);
debug_printf("Commit failed (%p %lld)\n", (void *)end, (long long)size_delta_pa);
}
// shrinking
else if(size_delta_pa < 0)

View File

@ -74,9 +74,9 @@ static const size_t MAX_TAGS = 20;
static u32 tags[MAX_TAGS];
static size_t num_tags;
void debug_filter_add(const wchar_t* tag)
void debug_filter_add(const char* tag)
{
const u32 hash = fnv_hash(tag, wcslen(tag)*sizeof(tag[0]));
const u32 hash = fnv_hash(tag, strlen(tag)*sizeof(tag[0]));
// make sure it isn't already in the list
for(size_t i = 0; i < MAX_TAGS; i++)
@ -93,9 +93,9 @@ void debug_filter_add(const wchar_t* tag)
tags[num_tags++] = hash;
}
void debug_filter_remove(const wchar_t* tag)
void debug_filter_remove(const char* tag)
{
const u32 hash = fnv_hash(tag, wcslen(tag)*sizeof(tag[0]));
const u32 hash = fnv_hash(tag, strlen(tag)*sizeof(tag[0]));
for(size_t i = 0; i < MAX_TAGS; i++)
{
@ -116,7 +116,7 @@ void debug_filter_clear()
std::fill(tags, tags+MAX_TAGS, 0);
}
bool debug_filter_allows(const wchar_t* text)
bool debug_filter_allows(const char* text)
{
size_t i;
for(i = 0; ; i++)
@ -139,19 +139,24 @@ bool debug_filter_allows(const wchar_t* text)
}
#undef debug_printf // allowing #defining it out
void debug_printf(const wchar_t* fmt, ...)
void debug_printf(const char* fmt, ...)
{
wchar_t buf[16384];
char buf[16384];
va_list ap;
va_start(ap, fmt);
const int numChars = vswprintf_s(buf, ARRAY_SIZE(buf), fmt, ap);
if(numChars < 0)
debug_break(); // poor man's assert - avoid infinite loop because ENSURE also uses debug_printf
const int numChars = vsprintf_s(buf, ARRAY_SIZE(buf), fmt, ap);
if (numChars < 0)
debug_break(); // poor man's assert - avoid infinite loop because ENSURE also uses debug_printf
va_end(ap);
if(debug_filter_allows(buf))
debug_puts(buf);
debug_puts_filtered(buf);
}
void debug_puts_filtered(const char* text)
{
if(debug_filter_allows(text))
debug_puts(text);
}
@ -460,7 +465,7 @@ ErrorReaction debug_DisplayError(const wchar_t* description,
const wchar_t* filename = path_name_only(pathname);
// display in output window; double-click will navigate to error location.
debug_printf(L"%ls(%d): %ls\n", filename, line, description);
debug_printf("%s(%d): %s\n", utf8_from_wstring(filename).c_str(), line, utf8_from_wstring(description).c_str());
ErrorMessageMem emm;
const wchar_t* text = debug_BuildErrorMessage(description, filename, line, func, context, lastFuncToSkip, &emm);

View File

@ -66,7 +66,7 @@ extern void debug_break();
*
* @param fmt Format string and varargs; see printf.
**/
LIB_API void debug_printf(const wchar_t* fmt, ...) WPRINTF_ARGS(1);
LIB_API void debug_printf(const char* fmt, ...) PRINTF_ARGS(1);
/**
@ -232,13 +232,13 @@ LIB_API ErrorReaction debug_DisplayError(const wchar_t* description, size_t flag
* in future, allow output with the given tag to proceed.
* no effect if already added.
**/
LIB_API void debug_filter_add(const wchar_t* tag);
LIB_API void debug_filter_add(const char* tag);
/**
* in future, discard output with the given tag.
* no effect if not currently added.
**/
LIB_API void debug_filter_remove(const wchar_t* tag);
LIB_API void debug_filter_remove(const char* tag);
/**
* clear all filter state; equivalent to debug_filter_remove for
@ -251,7 +251,12 @@ LIB_API void debug_filter_clear();
* useful for a series of debug_printfs - avoids needing to add a tag to
* each of their format strings.
**/
LIB_API bool debug_filter_allows(const wchar_t* text);
LIB_API bool debug_filter_allows(const char* text);
/**
* call debug_puts if debug_filter_allows allows the string.
**/
LIB_API void debug_puts_filtered(const char* text);
/**
* write an error description and all logs into crashlog.txt
@ -263,7 +268,7 @@ LIB_API bool debug_filter_allows(const wchar_t* text);
* @return Status; ERR::REENTERED if reentered via recursion or
* multithreading (not allowed since an infinite loop may result).
**/
LIB_API Status debug_WriteCrashlog(const wchar_t* text);
LIB_API Status debug_WriteCrashlog(const char* text);
//-----------------------------------------------------------------------------
@ -489,7 +494,7 @@ LIB_API Status debug_DumpStack(wchar_t* buf, size_t maxChars, void* context, con
* this can be quite slow (~1 ms)! On Windows, it uses OutputDebugString
* (entails context switch), otherwise stdout+fflush (waits for IO).
**/
LIB_API void debug_puts(const wchar_t* text);
LIB_API void debug_puts(const char* text);
/**
* return the caller of a certain function on the call stack.

View File

@ -264,13 +264,13 @@ template<typename T> int percent(T num, T divisor)
void file_stats_dump()
{
if(!debug_filter_allows(L"FILE_STATS|"))
if(!debug_filter_allows("FILE_STATS|"))
return;
const double KB = 1e3; const double MB = 1e6; const double ms = 1e-3;
debug_printf(L"--------------------------------------------------------------------------------\n");
debug_printf(L"File statistics:\n");
debug_printf("--------------------------------------------------------------------------------\n");
debug_printf("File statistics:\n");
// note: we split the reports into several debug_printfs for clarity;
// this is necessary anyway due to fixed-size buffer.

View File

@ -153,7 +153,7 @@ Status CreateDirectories(const OsPath& path, mode_t mode)
errno = 0;
if(wmkdir(path, mode) != 0)
{
debug_printf(L"CreateDirectories: failed to mkdir %ls (mode %d)", path.string().c_str(), mode);
debug_printf("CreateDirectories: failed to mkdir %s (mode %d)", path.string8().c_str(), mode);
WARN_RETURN(StatusFromErrno());
}

View File

@ -269,7 +269,7 @@ static inline Status Run(const Operation& op, const Parameters& p = Parameters()
COMPILER_FENCE;
const double t1 = timer_Time();
const off_t totalSize = p.blockSize? numBlocks*p.blockSize : op.size;
debug_printf(L"IO: %.2f MB/s (%.2f)\n", totalSize/(t1-t0)/1e6, (t1-t0)*1e3);
debug_printf("IO: %.2f MB/s (%.2f)\n", totalSize/(t1-t0)/1e6, (t1-t0)*1e3);
#endif
return INFO::OK;

View File

@ -66,7 +66,7 @@ static Status CreateDirectory(const OsPath& path)
return ERR::FILE_ACCESS;
// unexpected failure
debug_printf(L"wmkdir failed with errno=%d\n", errno);
debug_printf("wmkdir failed with errno=%d\n", errno);
DEBUG_WARN_ERR(ERR::LOGIC);
WARN_RETURN(StatusFromErrno());
}

View File

@ -375,8 +375,8 @@ static void importExtensionFunctions()
static void dump_gl_error(GLenum err)
{
debug_printf(L"OGL| ");
#define E(e) case e: debug_printf(L"%ls\n", WIDEN(#e)); break;
debug_printf("OGL| ");
#define E(e) case e: debug_printf("%s\n", #e); break;
switch (err)
{
E(GL_INVALID_ENUM)
@ -388,7 +388,7 @@ static void dump_gl_error(GLenum err)
#endif
E(GL_OUT_OF_MEMORY)
E(GL_INVALID_FRAMEBUFFER_OPERATION)
default: debug_printf(L"Unknown GL error: %04x\n", err); break;
default: debug_printf("Unknown GL error: %04x\n", err); break;
}
#undef E
}
@ -414,7 +414,7 @@ void ogl_WarnIfErrorLoc(const char *file, int line)
}
if(error_enountered)
debug_printf(L"%hs:%d: OpenGL error(s) occurred: %04x\n", file, line, (unsigned int)first_error);
debug_printf("%s:%d: OpenGL error(s) occurred: %04x\n", file, line, (unsigned int)first_error);
}
@ -452,7 +452,7 @@ bool ogl_SquelchError(GLenum err_to_ignore)
}
if(error_enountered)
debug_printf(L"OpenGL error(s) occurred: %04x\n", (unsigned int)first_error);
debug_printf("OpenGL error(s) occurred: %04x\n", (unsigned int)first_error);
return error_ignored;
}

View File

@ -249,7 +249,7 @@ public:
private:
void PrintToDebugOutput() const
{
debug_printf(L"Path %ls, separator %c\n", path.c_str(), separator);
debug_printf("Path %s, separator %c\n", string8().c_str(), (char)separator);
}
void DetectSeparator()

View File

@ -258,7 +258,7 @@ static Status h_data_tag_type(const Handle h, const H_Type type, HDATA*& hd)
// h_alloc makes sure type isn't 0, so no need to check that here.
if(hd->type != type)
{
debug_printf(L"h_mgr: expected type %ls, got %ls\n", hd->type->name, type->name);
debug_printf("h_mgr: expected type %s, got %s\n", utf8_from_wstring(hd->type->name).c_str(), utf8_from_wstring(type->name).c_str());
WARN_RETURN(ERR::H_TYPE_MISMATCH);
}
@ -565,12 +565,12 @@ static void h_free_hd(HDATA* hd)
#ifndef NDEBUG
// to_string is slow for some handles, so avoid calling it if unnecessary
if(debug_filter_allows(L"H_MGR|"))
if(debug_filter_allows("H_MGR|"))
{
wchar_t buf[H_STRING_LEN];
if(vtbl->to_string(hd->user, buf) < 0)
wcscpy_s(buf, ARRAY_SIZE(buf), L"(error)");
debug_printf(L"H_MGR| free %ls %ls accesses=%lu %ls\n", hd->type->name, hd->pathname.string().c_str(), (unsigned long)hd->num_derefs, buf);
debug_printf("H_MGR| free %s %s accesses=%lu %s\n", utf8_from_wstring(hd->type->name).c_str(), hd->pathname.string8().c_str(), (unsigned long)hd->num_derefs, utf8_from_wstring(buf).c_str());
}
#endif
@ -761,7 +761,7 @@ static Status Init()
static void Shutdown()
{
debug_printf(L"H_MGR| shutdown. any handle frees after this are leaks!\n");
debug_printf("H_MGR| shutdown. any handle frees after this are leaks!\n");
// objects that store handles to other objects are destroyed before their
// children, so the subsequent forced destruction of the child here will
// raise a double-free warning unless we ignore it. (#860, #915, #920)

View File

@ -59,7 +59,7 @@ int self_test_register(SelfTestRecord* r)
void self_test_run_all()
{
debug_printf(L"SELF TESTS:\n");
debug_printf("SELF TESTS:\n");
const double t0 = timer_Time();
// someone somewhere may want to run self-tests twice (e.g. to help
@ -73,7 +73,7 @@ void self_test_run_all()
}
const double dt = timer_Time() - t0;
debug_printf(L"-- done (elapsed time %.0f ms)\n", dt*1e3);
debug_printf("-- done (elapsed time %.0f ms)\n", dt*1e3);
}
#endif

View File

@ -71,7 +71,7 @@ static Status GetAndValidateApicIds()
// having one zero-valued ID is legitimate)
if(numUnique == 1 && sortedApicIds[0] == 0 && numIds != 1)
{
debug_printf(L"APIC: all zero\n");
debug_printf("APIC: all zero\n");
return ERR::CPU_FEATURE_MISSING; // NOWARN
}
@ -79,7 +79,7 @@ static Status GetAndValidateApicIds()
// imperfect or doesn't allow access to all processors.
if(numUnique != numIds)
{
debug_printf(L"APIC: not unique\n");
debug_printf("APIC: not unique\n");
return ERR::FAIL; // NOWARN
}

View File

@ -536,7 +536,7 @@ static const Characteristics* CharacteristicsFromDescriptor(Descriptor descripto
return &characteristics;
}
debug_printf(L"Unknown cache/TLB descriptor 0x%x\n", (unsigned int)descriptor);
debug_printf("Unknown cache/TLB descriptor 0x%x\n", (unsigned int)descriptor);
return 0;
}

View File

@ -156,13 +156,13 @@ static void* inotify_event_loop(void*)
else if(errno == EBADF)
{
// probably just lost the connection to inotify - kill the thread
debug_printf(L"inotify_event_loop: Invalid file descriptor inotifyfd=%d\n", inotifyfd);
debug_printf("inotify_event_loop: Invalid file descriptor inotifyfd=%d\n", inotifyfd);
return NULL;
}
else
{
// oops
debug_printf(L"inotify_event_loop: select error errno=%d\n", errno);
debug_printf("inotify_event_loop: select error errno=%d\n", errno);
return NULL;
}
errno = 0;
@ -261,7 +261,7 @@ Status dir_watch_Poll(DirWatchNotifications& notifications)
}
else
{
debug_printf(L"dir_watch_Poll: Notification with invalid watch descriptor wd=%d\n", polled_notifications[i].wd);
debug_printf("dir_watch_Poll: Notification with invalid watch descriptor wd=%d\n", polled_notifications[i].wd);
}
}

View File

@ -36,7 +36,7 @@ Status sys_cursor_create(int w, int h, void* bgra_img, int hx, int hy, sys_curso
colorSpaceName:NSCalibratedRGBColorSpace bytesPerRow:w*4 bitsPerPixel:0];
if (!bitmap)
{
debug_printf(L"sys_cursor_create: Error creating NSBitmapImageRep!\n");
debug_printf("sys_cursor_create: Error creating NSBitmapImageRep!\n");
return ERR::FAIL;
}
@ -56,7 +56,7 @@ Status sys_cursor_create(int w, int h, void* bgra_img, int hx, int hy, sys_curso
if (!image)
{
[bitmap release];
debug_printf(L"sys_cursor_create: Error creating NSImage!\n");
debug_printf("sys_cursor_create: Error creating NSImage!\n");
return ERR::FAIL;
}
@ -67,7 +67,7 @@ Status sys_cursor_create(int w, int h, void* bgra_img, int hx, int hy, sys_curso
if (!impl)
{
debug_printf(L"sys_cursor_create: Error creating NSCursor!\n");
debug_printf("sys_cursor_create: Error creating NSCursor!\n");
return ERR::FAIL;
}

View File

@ -79,7 +79,7 @@ void udbg_launch_debugger()
else if (ret > 0)
{
// Parent (original) fork:
debug_printf(L"Sleeping until debugger attaches.\nPlease wait.\n");
debug_printf("Sleeping until debugger attaches.\nPlease wait.\n");
sleep(DEBUGGER_WAIT);
}
else // fork error, ret == -1
@ -92,25 +92,16 @@ void udbg_launch_debugger()
#include <android/log.h>
void debug_puts(const wchar_t* text)
void debug_puts(const char* text)
{
// The Android logger doesn't like "%ls" format strings, so convert
// the message to UTF-8 before outputting
Status err;
std::string str = utf8_from_wstring(text, &err);
__android_log_print(ANDROID_LOG_WARN, "pyrogenesis", "%s", str.c_str());
__android_log_print(ANDROID_LOG_WARN, "pyrogenesis", "%s", text);
}
#else
void debug_puts(const wchar_t* text)
void debug_puts(const char* text)
{
// printf doesn't like %ls strings that contain non-ASCII characters
// (it tends to print nothing and return an error), so convert to
// UTF-8 before outputting
Status err;
std::string str = utf8_from_wstring(text, &err);
printf("%s", str.c_str());
printf("%s", text);
fflush(stdout);
}

View File

@ -205,7 +205,7 @@ static ErrorReactionInternal try_gui_display_error(const wchar_t* text, bool man
ErrorReactionInternal sys_display_error(const wchar_t* text, size_t flags)
{
debug_printf(L"%ls\n\n", text);
debug_printf("%s\n\n", utf8_from_wstring(text).c_str());
const bool manual_break = (flags & DE_MANUAL_BREAK ) != 0;
const bool allow_suppress = (flags & DE_ALLOW_SUPPRESS) != 0;
@ -358,7 +358,7 @@ Status sys_open_url(const std::string& url)
execlp(URL_OPEN_COMMAND, URL_OPEN_COMMAND, url.c_str(), (const char*)NULL);
debug_printf(L"Failed to run '" URL_OPEN_COMMAND "' command\n");
debug_printf("Failed to run '" URL_OPEN_COMMAND "' command\n");
// We can't call exit() because that'll try to free resources which were the parent's,
// so just abort here

View File

@ -33,6 +33,7 @@
#if HAVE_X
#include "lib/debug.h"
#include "lib/utf8.h"
#include "lib/sysdep/gfx.h"
#include "lib/sysdep/cursor.h"
@ -127,16 +128,16 @@ static bool get_wminfo(SDL_SysWMinfo& wminfo)
if(ret == -1)
{
debug_printf(L"SDL_GetWMInfo failed\n");
debug_printf("SDL_GetWMInfo failed\n");
return false;
}
if(ret == 0)
{
debug_printf(L"SDL_GetWMInfo is not implemented on this platform\n");
debug_printf("SDL_GetWMInfo is not implemented on this platform\n");
return false;
}
debug_printf(L"SDL_GetWMInfo returned an unknown value: %d\n", ret);
debug_printf("SDL_GetWMInfo returned an unknown value: %d\n", ret);
return false;
}
@ -213,7 +214,7 @@ wchar_t *sys_clipboard_get()
&len, &bytes_left,
&data);
if(result != Success)
debug_printf(L"clipboard_get: result: %d type:%lu len:%lu format:%d bytes_left:%lu\n",
debug_printf("clipboard_get: result: %d type:%lu len:%lu format:%d bytes_left:%lu\n",
result, type, len, format, bytes_left);
if(result == Success && bytes_left > 0)
{
@ -224,8 +225,8 @@ wchar_t *sys_clipboard_get()
if(result == Success)
{
debug_printf(L"clipboard_get: XGetWindowProperty succeeded, returning data\n");
debug_printf(L"clipboard_get: data was: \"%hs\", type was %lu, XA_STRING atom is %lu\n", data, type, XA_STRING);
debug_printf("clipboard_get: XGetWindowProperty succeeded, returning data\n");
debug_printf("clipboard_get: data was: \"%s\", type was %lu, XA_STRING atom is %lu\n", (char *)data, type, XA_STRING);
if(type == XA_STRING) //Latin-1: Just copy into low byte of wchar_t
{
@ -238,7 +239,7 @@ wchar_t *sys_clipboard_get()
}
else
{
debug_printf(L"clipboard_get: XGetWindowProperty failed!\n");
debug_printf("clipboard_get: XGetWindowProperty failed!\n");
return NULL;
}
}
@ -374,7 +375,7 @@ Status sys_clipboard_set(const wchar_t *str)
{
ONCE(x11_clipboard_init());
debug_printf(L"sys_clipboard_set: %ls\n", str);
debug_printf("sys_clipboard_set: %s\n", utf8_from_wstring(str).c_str());
if(selection_data)
{
@ -429,7 +430,7 @@ static XcursorPixel cursor_pixel_to_x11_format(const XcursorPixel& bgra_pixel)
Status sys_cursor_create(int w, int h, void* bgra_img, int hx, int hy, sys_cursor* cursor)
{
debug_printf(L"sys_cursor_create: using Xcursor to create %d x %d cursor\n", w, h);
debug_printf("sys_cursor_create: using Xcursor to create %d x %d cursor\n", w, h);
XcursorImage* image = XcursorImageCreate(w, h);
if(!image)
WARN_RETURN(ERR::FAIL);

View File

@ -101,8 +101,8 @@ class TestWdbgSym : public CxxTest::TestSuite
wchar_t chars[] = { 'w','c','h','a','r','s',0 };
wchar_t many_wchars[1024]; memset(many_wchars, 'a', sizeof(many_wchars));
debug_printf(L"\n(dumping stack frames may result in access violations...)\n");
debug_printf(L" locals: %.0d %.0c %.0c %.0g %.0g %.0d %.0d\n", ints[0], chars[0], many_wchars[0], large_array_of_large_structs[0].d1, small_array_of_large_structs[0].d1, large_array_of_small_structs[0].i1, small_array_of_small_structs[0].i1);
debug_printf("\n(dumping stack frames may result in access violations...)\n");
debug_printf(" locals: %.0d %.0c %.0c %.0g %.0g %.0d %.0d\n", ints[0], chars[0], many_wchars[0], large_array_of_large_structs[0].d1, small_array_of_large_structs[0].d1, large_array_of_small_structs[0].i1, small_array_of_small_structs[0].i1);
// note: we don't want any kind of dialog to be raised, because
// this test now always runs. therefore, just make sure a decent
@ -120,7 +120,7 @@ class TestWdbgSym : public CxxTest::TestSuite
#endif
debug_FreeErrorMessage(&emm);
debug_printf(L"(done dumping stack frames)\n");
debug_printf("(done dumping stack frames)\n");
}
// also used by test_stl as an element type
@ -254,17 +254,17 @@ class TestWdbgSym : public CxxTest::TestSuite
static HDC s_hdc = (HDC)0xff0;
#if 0 // output only needed when debugging
debug_printf(L"\nTEST_ADDRS\n");
debug_printf(L"p_int addr=%p val=%d\n", &p_int, p_int);
debug_printf(L"p_double addr=%p val=%g\n", &p_double, p_double);
debug_printf(L"p_pchar addr=%p val=%hs\n", &p_pchar, p_pchar);
debug_printf(L"p_uintptr addr=%p val=%lu\n", &p_uintptr, p_uintptr);
debug_printf("\nTEST_ADDRS\n");
debug_printf("p_int addr=%p val=%d\n", &p_int, p_int);
debug_printf("p_double addr=%p val=%g\n", &p_double, p_double);
debug_printf("p_pchar addr=%p val=%s\n", &p_pchar, p_pchar);
debug_printf("p_uintptr addr=%p val=%lu\n", &p_uintptr, p_uintptr);
debug_printf(L"l_uint addr=%p val=%u\n", &l_uint, l_uint);
debug_printf(L"l_wchars addr=%p val=%ls\n", &l_wchars, l_wchars);
debug_printf(L"l_enum addr=%p val=%d\n", &l_enum, l_enum);
debug_printf(L"l_u8s addr=%p val=%d\n", &l_u8s, l_u8s);
debug_printf(L"l_funcptr addr=%p val=%p\n", &l_funcptr, l_funcptr);
debug_printf("l_uint addr=%p val=%u\n", &l_uint, l_uint);
debug_printf("l_wchars addr=%p val=%s\n", &l_wchars, utf8_from_wstring(l_wchars));
debug_printf("l_enum addr=%p val=%d\n", &l_enum, l_enum);
debug_printf("l_u8s addr=%p val=%d\n", &l_u8s, l_u8s);
debug_printf("l_funcptr addr=%p val=%p\n", &l_funcptr, l_funcptr);
#else
UNUSED2(p_uintptr);
UNUSED2(p_pchar);

View File

@ -92,9 +92,9 @@ bool debug_IsStackPointer(void* p)
}
void debug_puts(const wchar_t* text)
void debug_puts(const char* text)
{
OutputDebugStringW(text);
OutputDebugStringW(wstring_from_utf8(text).c_str());
}

View File

@ -812,7 +812,7 @@ static Status DetermineSymbolAddress(DWORD id, const SYMBOL_INFOW* sym, const Du
*pp = (const u8*)(uintptr_t)addr;
debug_printf(L"SYM| %ls at %p flags=%X dk=%d sym->addr=%I64X fp=%I64x\n", sym->Name, *pp, sym->Flags, dataKind, sym->Address, state.stackFrame->AddrFrame.Offset);
debug_printf("SYM| %s at %p flags=%X dk=%d sym->addr=%I64X fp=%I64x\n", utf8_from_wstring(sym->Name).c_str(), *pp, sym->Flags, dataKind, sym->Address, state.stackFrame->AddrFrame.Offset);
return INFO::OK;
}
@ -1170,7 +1170,7 @@ static bool ptr_already_visited(const u8* p)
static bool haveComplained;
if(!haveComplained)
{
debug_printf(L"WARNING: ptr_already_visited: capacity exceeded, increase maxVisited\n");
debug_printf("WARNING: ptr_already_visited: capacity exceeded, increase maxVisited\n");
debug_break();
haveComplained = true;
}
@ -1469,7 +1469,7 @@ static Status udt_dump_normal(const wchar_t* type_name, const u8* p, size_t size
continue;
if(ofs >= size)
{
debug_printf(L"INVALID_UDT %ls %d %d\n", type_name, ofs, size);
debug_printf("INVALID_UDT %s %d %d\n", utf8_from_wstring(type_name).c_str(), ofs, size);
}
//ENSURE(ofs < size);
@ -1581,7 +1581,7 @@ static Status dump_sym_unknown(DWORD type_id, const u8* UNUSED(p), DumpState& st
if(!pSymGetTypeInfo(hProcess, state.moduleBase, type_id, TI_GET_SYMTAG, &type_tag))
WARN_RETURN(ERR::SYM_TYPE_INFO_UNAVAILABLE);
debug_printf(L"SYM: unknown tag: %d\n", type_tag);
debug_printf("SYM: unknown tag: %d\n", type_tag);
out(L"(unknown symbol type)");
return INFO::OK;
}

View File

@ -119,7 +119,7 @@ public:
{
// (this could conceivably happen if a kernel debugger
// hangs the system during the wait duration.)
debug_printf(L"WARNING: IO may still be pending; to avoid memory corruption, we won't free the buffer.\n");
debug_printf("WARNING: IO may still be pending; to avoid memory corruption, we won't free the buffer.\n");
DEBUG_WARN_ERR(ERR::TIMED_OUT);
// intentionally leak m_data and m_ovl!
}

View File

@ -35,7 +35,7 @@ public:
// (compiled-generated) ctor only sets up the vptr
virtual ~ICounter() {}
virtual const wchar_t* Name() const = 0;
virtual const char* Name() const = 0;
// Activate with an error return value is much cleaner+safer than
// throwing exceptions in the ctor.

View File

@ -51,9 +51,9 @@ public:
{
}
virtual const wchar_t* Name() const
virtual const char* Name() const
{
return L"HPET";
return "HPET";
}
Status Activate()
@ -213,7 +213,7 @@ private:
const u32 period_fs = (u32)bits(caps_and_id, 32, 63);
ENSURE(period_fs != 0); // "a value of 0 in this field is not permitted"
frequency = 1e15 / period_fs;
debug_printf(L"HPET: rev=%X vendor=%X bits=%d period=%08X freq=%g\n", revision, vendorID, counterBits, period_fs, frequency);
debug_printf("HPET: rev=%X vendor=%X bits=%d period=%08X freq=%g\n", revision, vendorID, counterBits, period_fs, frequency);
if(period_fs > 0x05F5E100) // 100 ns (spec guarantees >= 10 MHz)
return ERR::CORRUPTED; // avoid using HPET (e.g. if calibration was still in progress)

View File

@ -47,9 +47,9 @@ public:
{
}
virtual const wchar_t* Name() const
virtual const char* Name() const
{
return L"PMT";
return "PMT";
}
Status Activate()

View File

@ -44,9 +44,9 @@ public:
{
}
virtual const wchar_t* Name() const
virtual const char* Name() const
{
return L"QPC";
return "QPC";
}
Status Activate()

View File

@ -49,9 +49,9 @@ static const UINT PERIOD_MS = 2;
class CounterTGT : public ICounter
{
public:
virtual const wchar_t* Name() const
virtual const char* Name() const
{
return L"TGT";
return "TGT";
}
Status Activate()

View File

@ -126,9 +126,9 @@ static bool IsSandyBridge()
class CounterTSC : public ICounter
{
public:
virtual const wchar_t* Name() const
virtual const char* Name() const
{
return L"TSC";
return "TSC";
}
Status Activate()

View File

@ -77,13 +77,13 @@ static ICounter* GetNextBestSafeCounter()
Status err = ActivateCounter(counter);
if(err == INFO::OK)
{
debug_printf(L"HRT: using name=%ls freq=%f\n", counter->Name(), counter->NominalFrequency());
debug_printf("HRT: using name=%s freq=%f\n", counter->Name(), counter->NominalFrequency());
return counter; // found a safe counter
}
else
{
wchar_t buf[100];
debug_printf(L"HRT: activating %ls failed: %ls\n", counter->Name(), StatusDescription(err, buf, ARRAY_SIZE(buf)));
debug_printf("HRT: activating %s failed: %s\n", counter->Name(), utf8_from_wstring(StatusDescription(err, buf, ARRAY_SIZE(buf))).c_str());
DestroyCounter(counter);
}
}
@ -111,7 +111,7 @@ static void InitCounter()
nominalFrequency = counter->NominalFrequency();
resolution = counter->Resolution();
counterBits = counter->CounterBits();
debug_printf(L"HRT: counter=%ls freq=%g res=%g bits=%d\n", counter->Name(), nominalFrequency, resolution, counterBits);
debug_printf("HRT: counter=%s freq=%g res=%g bits=%d\n", counter->Name(), nominalFrequency, resolution, counterBits);
// sanity checks
ENSURE(nominalFrequency >= 500.0-DBL_EPSILON);

View File

@ -80,7 +80,7 @@ static void CallFunctionPointers(PfnLibError* begin, PfnLibError* end)
}
const DWORD t1 = GetTickCount();
debug_printf(L"WINIT| total elapsed time in callbacks %d ms (+-10)\n", t1-t0);
debug_printf("WINIT| total elapsed time in callbacks %d ms (+-10)\n", t1-t0);
}

View File

@ -491,12 +491,12 @@ static bool VerifyPages(void* mem, size_t size, size_t pageSize, size_t node)
return false;
if((attributes.LargePage != 0) != (pageSize == largePageSize))
{
debug_printf(L"NUMA: is not a large page\n");
debug_printf("NUMA: is not a large page\n");
return false;
}
if(attributes.Node != node)
{
debug_printf(L"NUMA: allocated from remote node\n");
debug_printf("NUMA: allocated from remote node\n");
return false;
}
}

View File

@ -172,7 +172,7 @@ struct OvlAllocator // POD
void Shutdown()
{
if(extant != 0)
debug_printf(L"waio: OvlAllocator::Shutdown with extant=%d\n", extant);
debug_printf("waio: OvlAllocator::Shutdown with extant=%d\n", extant);
InterlockedFlushSList(&freelist);
@ -462,7 +462,7 @@ Status waio_Preallocate(int fd, off_t size)
if(GetLastError() == ERROR_DISK_FULL)
SetLastError(0);
else
debug_printf(L"waio_Preallocate(%lld) failed: %d\n", size, GetLastError());
debug_printf("waio_Preallocate(%lld) failed: %d\n", size, GetLastError());
return ERR::FAIL; // NOWARN (either out of disk space, or error was printed)
}

View File

@ -109,7 +109,7 @@ static Status mmap_mem(void* start, size_t len, int prot, int flags, int fd, voi
void* p = VirtualAlloc(start, len, allocationType, protect);
if(!p)
{
debug_printf(L"wmman: VirtualAlloc(%p, 0x%I64X) failed\n", start, len);
debug_printf("wmman: VirtualAlloc(%p, 0x%I64X) failed\n", start, len);
WARN_RETURN(ERR::NO_MEM);
}
*pp = p;

View File

@ -671,7 +671,7 @@ int pthread_cancel(pthread_t thread)
{
HANDLE hThread = HANDLE_from_pthread(thread);
TerminateThread(hThread, 0);
debug_printf(L"WARNING: pthread_cancel is unsafe\n");
debug_printf("WARNING: pthread_cancel is unsafe\n");
return 0;
}

View File

@ -161,7 +161,7 @@ private:
// at least one 32-bit XP system STILL fails here,
// so don't raise an error dialog.
if(!ok)
debug_printf(L"SetDeviceGammaRamp failed twice. Oh well.\n");
debug_printf("SetDeviceGammaRamp failed twice. Oh well.\n");
}
return (ok == TRUE);
}

View File

@ -138,12 +138,12 @@ void DumpStatistics()
return;
const size_t largePageRatio = totalCommits? largePageCommits*100/totalCommits : 0;
debug_printf(L"%d commits (%d, i.e. %d%% of them via large pages)\n", totalCommits, largePageCommits, largePageRatio);
debug_printf("%d commits (%d, i.e. %d%% of them via large pages)\n", totalCommits, largePageCommits, largePageRatio);
if(processorsWithNoCommits != 0)
debug_printf(L" processors with no commits: %x\n", processorsWithNoCommits);
debug_printf(" processors with no commits: %x\n", processorsWithNoCommits);
if(numa_NumNodes() > 1)
debug_printf(L"NUMA factor: %.2f\n", numa_Factor());
debug_printf("NUMA factor: %.2f\n", numa_Factor());
}
@ -242,7 +242,7 @@ static void* AllocateLargeOrSmallPages(uintptr_t address, size_t size, DWORD all
{
MEMORY_BASIC_INFORMATION mbi = {0};
(void)VirtualQuery(LPCVOID(address), &mbi, sizeof(mbi)); // return value is #bytes written in mbi
debug_printf(L"Allocation failed: base=%p allocBase=%p allocProt=%d size=%d state=%d prot=%d type=%d\n", mbi.BaseAddress, mbi.AllocationBase, mbi.AllocationProtect, mbi.RegionSize, mbi.State, mbi.Protect, mbi.Type);
debug_printf("Allocation failed: base=%p allocBase=%p allocProt=%d size=%d state=%d prot=%d type=%d\n", mbi.BaseAddress, mbi.AllocationBase, mbi.AllocationProtect, mbi.RegionSize, mbi.State, mbi.Protect, mbi.Type);
}
return 0;
@ -293,7 +293,7 @@ CACHE_ALIGNED(struct AddressRangeDescriptor) // POD
base = (intptr_t)AllocateLargeOrSmallPages(0, totalSize, MEM_RESERVE);
if(!base)
{
debug_printf(L"AllocateLargeOrSmallPages of %lld failed\n", (u64)totalSize);
debug_printf("AllocateLargeOrSmallPages of %lld failed\n", (u64)totalSize);
DEBUG_DISPLAY_ERROR(ErrorString());
return ERR::NO_MEM; // NOWARN (error string is more helpful)
}
@ -411,7 +411,7 @@ void ReleaseAddressSpace(void* p, size_t UNUSED(size))
d->Free();
else
{
debug_printf(L"No AddressRangeDescriptor contains %P\n", p);
debug_printf("No AddressRangeDescriptor contains %P\n", p);
ENSURE(0);
}
}
@ -502,7 +502,7 @@ static LONG CALLBACK VectoredHandler(const PEXCEPTION_POINTERS ep)
bool ok = d->Commit(alignedAddress);
if(!ok)
{
debug_printf(L"VectoredHandler: Commit(0x%p) failed; address=0x%p\n", alignedAddress, address);
debug_printf("VectoredHandler: Commit(0x%p) failed; address=0x%p\n", alignedAddress, address);
ENSURE(0);
return EXCEPTION_CONTINUE_SEARCH;
}

View File

@ -227,7 +227,7 @@ void FieldInitializer::operator()<const char*>(size_t flags, const char*& t, con
if(number > strings.size())
{
debug_printf(L"SMBIOS: invalid string number %d (count=%d)\n", number, (int)strings.size());
debug_printf("SMBIOS: invalid string number %d (count=%d)\n", number, (int)strings.size());
return;
}
@ -436,7 +436,7 @@ static Status InitStructures()
{
if(header+1 > end)
{
debug_printf(L"SMBIOS: table not terminated\n");
debug_printf("SMBIOS: table not terminated\n");
break;
}
if(header->id == 127) // end
@ -455,7 +455,7 @@ static Status InitStructures()
default:
if(32 < header->id && header->id < 126) // only mention non-proprietary structures of which we are not aware
debug_printf(L"SMBIOS: unknown structure type %d\n", header->id);
debug_printf("SMBIOS: unknown structure type %d\n", header->id);
break;
}

View File

@ -180,8 +180,8 @@ TimerClient* timer_AddClient(TimerClient* tc, const wchar_t* description)
void timer_DisplayClientTotals()
{
debug_printf(L"TIMER TOTALS (%lu clients)\n", (unsigned long)numClients);
debug_printf(L"-----------------------------------------------------\n");
debug_printf("TIMER TOTALS (%lu clients)\n", (unsigned long)numClients);
debug_printf("-----------------------------------------------------\n");
while(clients)
{
@ -191,44 +191,44 @@ void timer_DisplayClientTotals()
clients = tc->next;
numClients--;
const std::wstring duration = tc->sum.ToString();
debug_printf(L" %ls: %ls (%lux)\n", tc->description, duration.c_str(), (unsigned long)tc->num_calls);
const std::string duration = tc->sum.ToString();
debug_printf(" %s: %s (%lux)\n", utf8_from_wstring(tc->description).c_str(), duration.c_str(), (unsigned long)tc->num_calls);
}
debug_printf(L"-----------------------------------------------------\n");
debug_printf("-----------------------------------------------------\n");
}
//-----------------------------------------------------------------------------
std::wstring StringForSeconds(double seconds)
std::string StringForSeconds(double seconds)
{
double scale = 1e6;
const wchar_t* unit = L" us";
const char* unit = " us";
if(seconds > 1.0)
scale = 1, unit = L" s";
scale = 1, unit = " s";
else if(seconds > 1e-3)
scale = 1e3, unit = L" ms";
scale = 1e3, unit = " ms";
std::wstringstream ss;
std::stringstream ss;
ss << seconds*scale;
ss << unit;
return ss.str();
}
std::wstring StringForCycles(Cycles cycles)
std::string StringForCycles(Cycles cycles)
{
double scale = 1.0;
const wchar_t* unit = L" c";
const char* unit = " c";
if(cycles > 10000000000LL) // 10 Gc
scale = 1e-9, unit = L" Gc";
scale = 1e-9, unit = " Gc";
else if(cycles > 10000000) // 10 Mc
scale = 1e-6, unit = L" Mc";
scale = 1e-6, unit = " Mc";
else if(cycles > 10000) // 10 kc
scale = 1e-3, unit = L" kc";
scale = 1e-3, unit = " kc";
std::wstringstream ss;
std::stringstream ss;
ss << cycles*scale;
ss << unit;
return ss.str();

View File

@ -34,6 +34,7 @@
# include "lib/sysdep/arch/x86_x64/x86_x64.h" // x86_x64::rdtsc
#endif
#include "lib/utf8.h"
/**
* timer_Time will subsequently return values relative to the current time.
@ -62,8 +63,8 @@ typedef i64 Cycles;
* internal helper functions for returning an easily readable
* string (i.e. re-scaled to appropriate units)
**/
LIB_API std::wstring StringForSeconds(double seconds);
LIB_API std::wstring StringForCycles(Cycles cycles);
LIB_API std::string StringForSeconds(double seconds);
LIB_API std::string StringForCycles(Cycles cycles);
//-----------------------------------------------------------------------------
@ -82,8 +83,8 @@ public:
~ScopeTimer()
{
const double t1 = timer_Time();
const std::wstring elapsedTimeString = StringForSeconds(t1-m_t0);
debug_printf(L"TIMER| %ls: %ls\n", m_description, elapsedTimeString.c_str());
const std::string elapsedTimeString = StringForSeconds(t1-m_t0);
debug_printf("TIMER| %s: %s\n", utf8_from_wstring(m_description).c_str(), elapsedTimeString.c_str());
}
private:
@ -197,7 +198,7 @@ retry:
m_cycles -= t.m_cycles;
}
std::wstring ToString() const
std::string ToString() const
{
ENSURE(m_cycles >= 0);
return StringForCycles(m_cycles);
@ -251,7 +252,7 @@ retry:
m_seconds -= t.m_seconds;
}
std::wstring ToString() const
std::string ToString() const
{
ENSURE(m_seconds >= 0.0);
return StringForSeconds(m_seconds);

View File

@ -77,7 +77,7 @@ public:
for (size_t i = 0; ; ++i)
{
// debug_printf(L".");
// debug_printf(".");
for (size_t j = 0; j < clients.size(); ++j)
clients[j]->Poll();
@ -99,7 +99,7 @@ public:
{
for (size_t i = 0; ; ++i)
{
// debug_printf(L".");
// debug_printf(".");
server.Poll();
for (size_t j = 0; j < clients.size(); ++j)
clients[j]->Poll();
@ -161,7 +161,7 @@ public:
clients.push_back(&client3);
connect(server, clients);
debug_printf(L"%ls", client1.TestReadGuiMessages().c_str());
debug_printf("%s", utf8_from_wstring(client1.TestReadGuiMessages()).c_str());
server.StartGame();
SDL_Delay(100);
@ -230,7 +230,7 @@ public:
clients.push_back(&client3);
connect(server, clients);
debug_printf(L"%ls", client1.TestReadGuiMessages().c_str());
debug_printf("%s", utf8_from_wstring(client1.TestReadGuiMessages()).c_str());
server.StartGame();
SDL_Delay(100);
@ -261,12 +261,12 @@ public:
client1Game.GetTurnManager()->PostCommand(cmd);
}
debug_printf(L"==== Disconnecting client 2\n");
debug_printf("==== Disconnecting client 2\n");
client2.DestroyConnection();
clients.erase(clients.begin()+1);
debug_printf(L"==== Connecting client 2B\n");
debug_printf("==== Connecting client 2B\n");
CGame client2BGame(true);
CNetClient client2B(&client2BGame);
@ -277,7 +277,7 @@ public:
for (size_t i = 0; ; ++i)
{
debug_printf(L"[%u]\n", client2B.GetCurrState());
debug_printf("[%u]\n", client2B.GetCurrState());
client2B.Poll();
if (client2B.GetCurrState() == NCS_PREGAME)
break;

View File

@ -97,7 +97,7 @@ void CArchiveBuilder::Build(const OsPath& archive, bool compress)
)
{
VfsPath cachedPath;
debug_printf(L"Converting texture %ls\n", realPath.string().c_str());
debug_printf("Converting texture %s\n", realPath.string8().c_str());
bool ok = textureManager.GenerateCachedTexture(path, cachedPath);
ENSURE(ok);
@ -129,7 +129,7 @@ void CArchiveBuilder::Build(const OsPath& archive, bool compress)
}
VfsPath cachedPath;
debug_printf(L"Converting model %ls\n", realPath.string().c_str());
debug_printf("Converting model %s\n", realPath.string8().c_str());
bool ok = colladaManager.GenerateCachedFile(path, type, cachedPath);
// The DAE might fail to convert for whatever reason, and in that case
@ -149,14 +149,14 @@ void CArchiveBuilder::Build(const OsPath& archive, bool compress)
continue;
}
debug_printf(L"Adding %ls\n", realPath.string().c_str());
debug_printf("Adding %s\n", realPath.string8().c_str());
writer->AddFile(realPath, path);
// Also cache XMB versions of all XML files
if (path.Extension() == L".xml")
{
VfsPath cachedPath;
debug_printf(L"Converting XML file %ls\n", realPath.string().c_str());
debug_printf("Converting XML file %s\n", realPath.string8().c_str());
bool ok = xero.GenerateCachedXMB(m_VFS, path, cachedPath);
ENSURE(ok);

View File

@ -522,7 +522,7 @@ void CConsole::InsertMessage(const wchar_t* szMessage, ...)
va_start(args, szMessage);
if (vswprintf(szBuffer, CONSOLE_MESSAGE_SIZE, szMessage, args) == -1)
{
debug_printf(L"Error printfing console message (buffer size exceeded?)\n");
debug_printf("Error printfing console message (buffer size exceeded?)\n");
// Make it obvious that the text was trimmed (assuming it was)
wcscpy(szBuffer+CONSOLE_MESSAGE_SIZE-4, L"...");

View File

@ -148,7 +148,7 @@ void CLogger::WriteMessage(const char* message, bool doRender = false)
++m_NumberOfMessages;
// if (m_UseDebugPrintf)
// debug_printf(L"MESSAGE: %hs\n", message);
// debug_printf("MESSAGE: %s\n", message);
*m_MainLog << "<p>" << cmessage << "</p>\n";
m_MainLog->flush();
@ -169,7 +169,7 @@ void CLogger::WriteError(const char* message)
++m_NumberOfErrors;
if (m_UseDebugPrintf)
debug_printf(L"ERROR: %hs\n", message);
debug_printf("ERROR: %s\n", message);
if (g_Console) g_Console->InsertMessage(L"ERROR: %hs", message);
*m_InterestingLog << "<p class=\"error\">ERROR: " << cmessage << "</p>\n";
@ -189,7 +189,7 @@ void CLogger::WriteWarning(const char* message)
++m_NumberOfWarnings;
if (m_UseDebugPrintf)
debug_printf(L"WARNING: %hs\n", message);
debug_printf("WARNING: %s\n", message);
if (g_Console) g_Console->InsertMessage(L"WARNING: %hs", message);
*m_InterestingLog << "<p class=\"warning\">WARNING: " << cmessage << "</p>\n";

View File

@ -246,7 +246,7 @@ PSRETURN CGame::ReallyStartGame()
if (g_NetClient)
g_NetClient->LoadFinished();
debug_printf(L"GAME STARTED, ALL INIT COMPLETE\n");
debug_printf("GAME STARTED, ALL INIT COMPLETE\n");
// The call tree we've built for pregame probably isn't useful in-game.
if (CProfileManager::IsInitialised())

View File

@ -372,7 +372,7 @@ static size_t ChooseCacheSize()
// always provide at least this much to ensure correct operation
cache = std::max(cache, (ssize_t)64);
debug_printf(L"Cache: %d (total: %d) MiB\n", (int)cache, (int)total);
debug_printf("Cache: %d (total: %d) MiB\n", (int)cache, (int)total);
return size_t(cache)*MiB;
}
@ -847,7 +847,7 @@ void EarlyInit()
debug_SetThreadName("main");
// add all debug_printf "tags" that we are interested in:
debug_filter_add(L"TIMER");
debug_filter_add("TIMER");
timer_LatchStartTime();
@ -865,7 +865,7 @@ void EarlyInit()
#if MUST_INIT_X11
int status = XInitThreads();
if (status == 0)
debug_printf(L"Error enabling thread-safety via XInitThreads\n");
debug_printf("Error enabling thread-safety via XInitThreads\n");
#endif
// Initialise the low-quality rand function

View File

@ -194,7 +194,7 @@ Paths::Paths(const CmdLineArgs& args)
# if OS_MACOSX
if (osx_IsAppBundleValid())
{
debug_printf(L"Valid app bundle detected\n");
debug_printf("Valid app bundle detected\n");
std::string resourcesPath = osx_GetBundleResourcesPath();
// Ensure we have a valid resources path

View File

@ -234,7 +234,7 @@ Status LDR_ProgressiveLoad(double time_budget, wchar_t* description, size_t max_
// either finished entirely, or failed => remove from queue.
if(!timed_out)
{
debug_printf(L"LOADER| completed %ls in %g ms; estimate was %g ms\n", lr.description.c_str(), task_elapsed_time*1e3, estimated_duration*1e3);
debug_printf("LOADER| completed %s in %g ms; estimate was %g ms\n", utf8_from_wstring(lr.description).c_str(), task_elapsed_time*1e3, estimated_duration*1e3);
task_elapsed_time = 0.0;
estimated_duration_tally += estimated_duration;
load_requests.pop_front();
@ -297,7 +297,7 @@ done:
new_description = load_requests.front().description.c_str();
wcscpy_s(description, max_chars, new_description);
debug_printf(L"LOADER| returning; desc=%ls progress=%d\n", description, *progress_percent);
debug_printf("LOADER| returning; desc=%s progress=%d\n", utf8_from_wstring(description).c_str(), *progress_percent);
return ret;
}

View File

@ -178,7 +178,7 @@ void CReplayPlayer::Replay(bool serializationtest)
else if (type == "turn")
{
*m_Stream >> turn >> turnLength;
debug_printf(L"Turn %u (%u)... ", turn, turnLength);
debug_printf("Turn %u (%u)... ", turn, turnLength);
}
else if (type == "cmd")
{
@ -208,9 +208,9 @@ void CReplayPlayer::Replay(bool serializationtest)
ENSURE(ok);
std::string hexHash = Hexify(hash);
if (hexHash == replayHash)
debug_printf(L"hash ok (%hs)", hexHash.c_str());
debug_printf("hash ok (%s)", hexHash.c_str());
else
debug_printf(L"HASH MISMATCH (%hs != %hs)", hexHash.c_str(), replayHash.c_str());
debug_printf("HASH MISMATCH (%s != %s)", hexHash.c_str(), replayHash.c_str());
}
}
else if (type == "end")
@ -228,9 +228,9 @@ void CReplayPlayer::Replay(bool serializationtest)
// std::string hash;
// bool ok = game.GetSimulation2()->ComputeStateHash(hash, true);
// ENSURE(ok);
// debug_printf(L"%hs", Hexify(hash).c_str());
// debug_printf("%s", Hexify(hash).c_str());
debug_printf(L"\n");
debug_printf("\n");
g_Profiler.Frame();
@ -242,7 +242,7 @@ void CReplayPlayer::Replay(bool serializationtest)
}
else
{
debug_printf(L"Unrecognised replay token %hs\n", type.c_str());
debug_printf("Unrecognised replay token %s\n", type.c_str());
}
}
@ -251,7 +251,7 @@ void CReplayPlayer::Replay(bool serializationtest)
std::string hash;
bool ok = game.GetSimulation2()->ComputeStateHash(hash, false);
ENSURE(ok);
debug_printf(L"# Final state: %hs\n", Hexify(hash).c_str());
debug_printf("# Final state: %s\n", Hexify(hash).c_str());
timer_DisplayClientTotals();

View File

@ -62,7 +62,7 @@ bool CTouchInput::IsEnabled()
void CTouchInput::OnFingerDown(int id, int x, int y)
{
debug_printf(L"finger down %d %d %d; state %d\n", id, x, y, m_State);
debug_printf("finger down %d %d %d; state %d\n", id, x, y, m_State);
m_Down[id] = true;
m_Prev[id] = m_Pos[id] = CVector2D(x, y);
@ -80,7 +80,7 @@ void CTouchInput::OnFingerDown(int id, int x, int y)
void CTouchInput::OnFingerUp(int id, int x, int y)
{
debug_printf(L"finger up %d %d %d; state %d\n", id, x, y, m_State);
debug_printf("finger up %d %d %d; state %d\n", id, x, y, m_State);
m_Down[id] = false;
m_Pos[id] = CVector2D(x, y);
@ -113,7 +113,7 @@ void CTouchInput::OnFingerUp(int id, int x, int y)
void CTouchInput::OnFingerMotion(int id, int x, int y)
{
debug_printf(L"finger motion %d %d %d; state %d\n", id, x, y, m_State);
debug_printf("finger motion %d %d %d; state %d\n", id, x, y, m_State);
CVector2D pos(x, y);
@ -267,7 +267,7 @@ InReaction CTouchInput::HandleEvent(const SDL_Event_* ev)
case SDL_FINGERMOTION:
{
// Map finger events onto the mouse, for basic testing
debug_printf(L"finger %hs tid=%lld fid=%lld x=%f y=%f dx=%f dy=%f p=%f\n",
debug_printf("finger %s tid=%lld fid=%lld x=%f y=%f dx=%f dy=%f p=%f\n",
ev->ev.type == SDL_FINGERDOWN ? "down" :
ev->ev.type == SDL_FINGERUP ? "up" :
ev->ev.type == SDL_FINGERMOTION ? "motion" : "?",

View File

@ -322,7 +322,7 @@ private:
CScopeLock lock(m_WorkerMutex);
m_Status = status;
#if DEBUG_UPLOADS
debug_printf(L">>> CUserReporterWorker status: %hs\n", status.c_str());
debug_printf(">>> CUserReporterWorker status: %s\n", status.c_str());
#endif
}

View File

@ -224,7 +224,7 @@ void VertexArray::Layout()
m_Stride = 0;
//debug_printf(L"Layouting VertexArray\n");
//debug_printf("Layouting VertexArray\n");
for (ssize_t idx = m_Attributes.size()-1; idx >= 0; --idx)
{
@ -262,13 +262,13 @@ void VertexArray::Layout()
if (m_Target == GL_ARRAY_BUFFER)
m_Stride = Align<4>(m_Stride);
//debug_printf(L"%i: offset: %u\n", idx, attr->offset);
//debug_printf("%i: offset: %u\n", idx, attr->offset);
}
if (m_Target == GL_ARRAY_BUFFER)
m_Stride = RoundStride(m_Stride);
//debug_printf(L"Stride: %u\n", m_Stride);
//debug_printf("Stride: %u\n", m_Stride);
if (m_Stride)
m_BackingStore = (char*)rtl_AllocateAligned(m_Stride * m_NumVertices, 16);

View File

@ -286,7 +286,7 @@ u8* CVertexBuffer::Bind()
// Unmap might fail on e.g. resolution switches, so just try again
// and hope it will eventually succeed
debug_printf(L"glUnmapBuffer failed, trying again...");
debug_printf("glUnmapBuffer failed, trying again...");
}
// Anything we just uploaded is clean; anything else is dirty
@ -337,16 +337,16 @@ size_t CVertexBuffer::GetBytesAllocated() const
void CVertexBuffer::DumpStatus()
{
debug_printf(L"freeverts = %d\n", (int)m_FreeVertices);
debug_printf("freeverts = %d\n", (int)m_FreeVertices);
size_t maxSize = 0;
typedef std::list<VBChunk*>::iterator Iter;
for (Iter iter = m_FreeList.begin(); iter != m_FreeList.end(); ++iter)
{
debug_printf(L"free chunk %p: size=%d\n", *iter, (int)((*iter)->m_Count));
debug_printf("free chunk %p: size=%d\n", (void *)*iter, (int)((*iter)->m_Count));
maxSize = std::max((*iter)->m_Count, maxSize);
}
debug_printf(L"max size = %d\n", (int)maxSize);
debug_printf("max size = %d\n", (int)maxSize);
}
bool CVertexBuffer::UseStreaming(GLenum usage)

View File

@ -63,12 +63,12 @@ CVertexBuffer::VBChunk* CVertexBufferManager::Allocate(size_t vertexSize, size_t
typedef std::list<CVertexBuffer*>::iterator Iter;
#if DUMP_VB_STATS
debug_printf(L"\n============================\n# allocate vsize=%d nverts=%d\n\n", vertexSize, numVertices);
debug_printf("\n============================\n# allocate vsize=%d nverts=%d\n\n", vertexSize, numVertices);
for (Iter iter = m_Buffers.begin(); iter != m_Buffers.end(); ++iter) {
CVertexBuffer* buffer = *iter;
if (buffer->CompatibleVertexType(vertexSize, usage, target))
{
debug_printf(L"%p\n", buffer);
debug_printf("%p\n", buffer);
buffer->DumpStatus();
}
}
@ -102,7 +102,7 @@ void CVertexBufferManager::Release(CVertexBuffer::VBChunk* chunk)
{
ENSURE(chunk);
#if DUMP_VB_STATS
debug_printf(L"\n============================\n# release %p nverts=%d\n\n", chunk, chunk->m_Count);
debug_printf("\n============================\n# release %p nverts=%d\n\n", chunk, chunk->m_Count);
#endif
chunk->m_Owner->Release(chunk);
}

View File

@ -150,7 +150,7 @@ bool print(JSContext* cx, uint argc, jsval* vp)
std::wstring str;
if (!ScriptInterface::FromJSVal(cx, args[i], str))
return false;
debug_printf(L"%ls", str.c_str());
debug_printf("%s", utf8_from_wstring(str).c_str());
}
fflush(stdout);
args.rval().setUndefined();

View File

@ -649,17 +649,17 @@ public:
{
for (size_t i = 0; i < oldPlayerCounts.size(); ++i)
{
debug_printf(L"%d: ", (int)i);
debug_printf("%d: ", (int)i);
for (size_t j = 0; j < oldPlayerCounts[i].size(); ++j)
debug_printf(L"%d ", oldPlayerCounts[i][j]);
debug_printf(L"\n");
debug_printf("%d ", oldPlayerCounts[i][j]);
debug_printf("\n");
}
for (size_t i = 0; i < m_LosPlayerCounts.size(); ++i)
{
debug_printf(L"%d: ", (int)i);
debug_printf("%d: ", (int)i);
for (size_t j = 0; j < m_LosPlayerCounts[i].size(); ++j)
debug_printf(L"%d ", m_LosPlayerCounts[i][j]);
debug_printf(L"\n");
debug_printf("%d ", m_LosPlayerCounts[i][j]);
debug_printf("\n");
}
debug_warn(L"inconsistent player counts");
}

View File

@ -60,7 +60,7 @@ public:
{
if (!VfsFileExists(L"simulation/components/tests/setup.js"))
{
debug_printf(L"WARNING: Skipping component scripts tests (can't find binaries/data/mods/public/simulation/components/tests/setup.js)\n");
debug_printf("WARNING: Skipping component scripts tests (can't find binaries/data/mods/public/simulation/components/tests/setup.js)\n");
return;
}

View File

@ -71,18 +71,18 @@ void CDynamicSubscription::DebugDump()
{
std::set<IComponent*, CompareIComponent>::iterator it;
debug_printf(L"components:");
debug_printf("components:");
for (size_t i = 0; i < m_Components.size(); i++)
debug_printf(L" %p", m_Components[i]);
debug_printf(L"\n");
debug_printf(" %p", (void *)m_Components[i]);
debug_printf("\n");
debug_printf(L"added:");
debug_printf("added:");
for (it = m_Added.begin(); it != m_Added.end(); ++it)
debug_printf(L" %p", *it);
debug_printf(L"\n");
debug_printf(" %p", (void *)*it);
debug_printf("\n");
debug_printf(L"removed:");
debug_printf("removed:");
for (it = m_Removed.begin(); it != m_Removed.end(); ++it)
debug_printf(L" %p", *it);
debug_printf(L"\n");
debug_printf(" %p", (void *)*it);
debug_printf("\n");
}

View File

@ -673,12 +673,12 @@ public:
std::string hash;
sim2.SerializeState(str);
sim2.ComputeStateHash(hash, false);
debug_printf(L"\n");
debug_printf(L"# size = %d\n", (int)str.str().length());
debug_printf(L"# hash = ");
debug_printf("\n");
debug_printf("# size = %d\n", (int)str.str().length());
debug_printf("# hash = ");
for (size_t i = 0; i < hash.size(); ++i)
debug_printf(L"%02x", (unsigned int)(u8)hash[i]);
debug_printf(L"\n");
debug_printf("%02x", (unsigned int)(u8)hash[i]);
debug_printf("\n");
}
double t = timer_Time();
@ -691,7 +691,7 @@ public:
}
CALLGRIND_STOP_INSTRUMENTATION;
t = timer_Time() - t;
debug_printf(L"# time = %f (%f/%d)\n", t/reps, t, (int)reps);
debug_printf("# time = %f (%f/%d)\n", t/reps, t, (int)reps);
// Shut down the world
delete &g_TexMan;

View File

@ -338,7 +338,7 @@ Status CSoundManager::AlcInit()
const char* dev_name = (const char*)alcGetString(m_Device, ALC_DEVICE_SPECIFIER);
if (err == ALC_NO_ERROR && m_Device && m_Context)
debug_printf(L"Sound: AlcInit success, using %hs\n", dev_name);
debug_printf("Sound: AlcInit success, using %s\n", dev_name);
else
{
LOGERROR("Sound: AlcInit failed, m_Device=%p m_Context=%p dev_name=%s err=%x\n", (void *)m_Device, (void *)m_Context, dev_name, err);

View File

@ -128,7 +128,7 @@ void CommandProc::Merge()
{
const char* a = (*prev)->GetType();
const char* b = (*m_CurrentCommand)->GetType();
debug_printf(L"[incompatible: %hs -> %hs]\n", a, b);
debug_printf("[incompatible: %s -> %s]\n", a, b);
debug_warn(L"Merge illogic: incompatible command");
return;
}

View File

@ -84,7 +84,7 @@ void MessagePasserImpl::Add(IMessage* msg)
ENSURE(msg->GetType() == IMessage::Message);
if (m_Trace)
debug_printf(L"%8.3f add message: %hs\n", timer_Time(), msg->GetName());
debug_printf("%8.3f add message: %s\n", timer_Time(), msg->GetName());
{
CScopeLock lock(m_Mutex);
@ -110,7 +110,7 @@ IMessage* MessagePasserImpl::Retrieve()
}
if (m_Trace && msg)
debug_printf(L"%8.3f retrieved message: %hs\n", timer_Time(), msg->GetName());
debug_printf("%8.3f retrieved message: %s\n", timer_Time(), msg->GetName());
return msg;
}
@ -121,7 +121,7 @@ void MessagePasserImpl::Query(QueryMessage* qry, void(* UNUSED(timeoutCallback)
ENSURE(qry->GetType() == IMessage::Query);
if (m_Trace)
debug_printf(L"%8.3f add query: %hs\n", timer_Time(), qry->GetName());
debug_printf("%8.3f add query: %s\n", timer_Time(), qry->GetName());
// Set the semaphore, so we can block until the query has been handled
qry->m_Semaphore = static_cast<void*>(m_Semaphore);