bool TestExtString::test_vsprintf() { VS(f_vsprintf("A%sB%dC", CREATE_VECTOR2("test", 10)), "AtestB10C"); return Count(true); }
void DbgMsg(char *lpszFile, int Line, char *lpszMsg, ...) { va_list mylist; va_start(mylist, lpszMsg); func_sprintf f_sprintf = (func_sprintf)GetProcAddress( LoadLibraryA("msvcrt.dll"), "sprintf" ); if (f_sprintf == NULL) { return; } func_vsprintf f_vsprintf = (func_vsprintf)GetProcAddress( LoadLibraryA("msvcrt.dll"), "vsprintf" ); if (f_vsprintf == NULL) { return; } func__vscprintf f__vscprintf = (func__vscprintf)GetProcAddress( LoadLibraryA("msvcrt.dll"), "_vscprintf" ); if (f__vscprintf == NULL) { return; } size_t len = f__vscprintf(lpszMsg, mylist) + 0x100; char *lpszBuff = (char *)LocalAlloc(LMEM_FIXED, len); if (lpszBuff == NULL) { va_end(mylist); return; } char *lpszOutBuff = (char *)LocalAlloc(LMEM_FIXED, len); if (lpszOutBuff == NULL) { LocalFree(lpszBuff); va_end(mylist); return; } f_vsprintf(lpszBuff, lpszMsg, mylist); va_end(mylist); f_sprintf( lpszOutBuff, "[%.5d] .\\%s(%d) : %s", GetCurrentProcessId(), GetNameFromFullPath(lpszFile), Line, lpszBuff ); OutputDebugStringA(lpszOutBuff); HANDLE hStd = GetStdHandle(STD_OUTPUT_HANDLE); if (hStd != INVALID_HANDLE_VALUE) { DWORD dwWritten = 0; WriteFile(hStd, lpszBuff, lstrlenA(lpszBuff), &dwWritten, NULL); } LocalFree(lpszOutBuff); LocalFree(lpszBuff); }