void Utils::appendText(wchar_t **str, int *sizeAlloced, const wchar_t *fmt, ...) { va_list vararg; wchar_t *p; int size, len; if (str == NULL) return; if (*str==NULL || *sizeAlloced<=0) { *sizeAlloced = size = 2048; *str = (wchar_t *) malloc(size); len = 0; } else { len = (int)wcslen(*str); size = *sizeAlloced - sizeof(wchar_t) * len; } if (size < 128) { size += 2048; (*sizeAlloced) += 2048; *str = (wchar_t *) realloc(*str, *sizeAlloced); } p = *str + len; va_start(vararg, fmt); while (mir_vsnwprintf(p, size / sizeof(wchar_t) - 1, fmt, vararg) == -1) { size += 2048; (*sizeAlloced) += 2048; *str = (wchar_t *) realloc(*str, *sizeAlloced); p = *str + len; } p[ size / sizeof(wchar_t) - 1] = '\0'; va_end(vararg); }
void _DebugTraceW(const wchar_t *fmt, ...) { #ifdef _DEBUG wchar_t debug[2048]; int ibsize = 2047; va_list va; va_start(va, fmt); lstrcpyW(debug, L"CLN: "); mir_vsnwprintf(&debug[5], ibsize - 10, fmt, va); OutputDebugStringW(debug); #endif }
void DebugLogW(HANDLE File,const WCHAR *fmt,...) { WCHAR *str; char tids[32]; va_list vararg; int strsize; DWORD Written; va_start(vararg,fmt); str=(WCHAR *)malloc((strsize=65536)*sizeof(WCHAR)); mir_snprintf(tids, "[%x]",GetCurrentThreadId()); while(mir_vsnwprintf(str, strsize, fmt, vararg)==-1) str=(WCHAR *)realloc(str,(strsize+=65536)*sizeof(WCHAR)); va_end(vararg); EnterCriticalSection(&FileAccessCS); WriteFile(File,tids,(DWORD)mir_strlen(tids),&Written,NULL); WriteFile(File,str,(DWORD)mir_wstrlen(str)*sizeof(WCHAR),&Written,NULL); LeaveCriticalSection(&FileAccessCS); free(str); }