bool naStringFormatV( std::wstring& rstrOutput, const wchar_t* format, va_list ap) { wchar_t wszLocalBuffer[256]; va_list vaClone; va_copy(vaClone, ap); int nOutputSize = _vsnwprintf(wszLocalBuffer, sizeof(wszLocalBuffer)/sizeof(wszLocalBuffer[0]), format, vaClone); va_end(vaClone); if( nOutputSize < 0 ) return false; if( nOutputSize < (sizeof(wszLocalBuffer)/sizeof(wszLocalBuffer[0]))) { rstrOutput.assign( wszLocalBuffer, nOutputSize ); return true; } wchar_t* szDynamicBuffer = new wchar_t[nOutputSize+1]; va_copy(vaClone, ap); nOutputSize = _vsnwprintf(szDynamicBuffer, nOutputSize+1, format, vaClone); va_end(vaClone); if( nOutputSize < 0 ) { delete[] szDynamicBuffer; return false; } rstrOutput.append( szDynamicBuffer, nOutputSize ); delete[] szDynamicBuffer; return true; }
void GUI_Laftfont::printgl(int x, int y, int z, const wchar_t *fmt, ...) { wchar_t text[2048]; va_list ap; size_t str_len; if ((!listsFont) || (!fmt)) return; va_start(ap, fmt); #ifdef WIN32 _vsnwprintf(text, 2048, fmt, ap); #else vswprintf(text, 2048, fmt, ap); #endif va_end(ap); str_len = wcslen(text); // should be in modelview mode glPushMatrix(); glLoadIdentity(); glEnable(GL_TEXTURE_2D); glListBase(listsFont); glTranslatef((float)x, (float)y, (float)z); glScalef(1.0f, -1.0f, 1.0f); #ifdef WIN32 glCallLists((GLsizei)(str_len), GL_UNSIGNED_SHORT, text); #else glCallLists((GLsizei)(str_len), GL_UNSIGNED_INT, text); #endif glDisable(GL_TEXTURE_2D); glPopMatrix(); return; }
////////////////////////////////////////////////////////////////// // void InternalTrace // ////////////////////////////////////////////////////////////////// void InternalTrace(const WCHAR* pwszFmt, ...) { va_list marker; WCHAR wszBuffer[MAX_TRACE_LEN]; CHAR szBuffer[MAX_TRACE_LEN]; // Use format and arguements as input //This version will not overwrite the stack, since it only copies //upto the max size of the array va_start(marker, pwszFmt); _vsnwprintf(wszBuffer, MAX_TRACE_LEN, pwszFmt, marker); va_end(marker); //Make sure there is a NULL Terminator, vsnwprintf will not copy //the terminator if length==MAX_TRACE_LEN wszBuffer[MAX_TRACE_LEN-2] = L'\n'; wszBuffer[MAX_TRACE_LEN-1] = L'\0'; //Convert to MBCS ConvertToMBCS(wszBuffer, szBuffer, MAX_TRACE_LEN); //Output to the DebugWindow for(ULONG x=0; x <= strlen(szBuffer); x+=1029) OutputDebugStringA(szBuffer+x); }
int InfoMessageBox(HWND hWnd, UINT uType, LPCWSTR lpTitle, LPCWSTR lpMessage, ...) { int iRet = 0; LPWSTR lpMsgBuf = NULL; va_list args = NULL; va_start(args, lpMessage); if (lpMessage) { SIZE_T strLen = _vscwprintf(lpMessage, args); /* Create a buffer on the heap and zero it out (LPTR) */ lpMsgBuf = (LPWSTR)LocalAlloc(LPTR, (strLen + 1) * sizeof(WCHAR)); if (lpMsgBuf) { _vsnwprintf(lpMsgBuf, strLen, lpMessage, args); } } va_end(args); iRet = MessageBoxW(hWnd, (lpMessage && lpMsgBuf ? lpMsgBuf : L"Error displaying info message."), lpTitle, uType); if (lpMsgBuf) LocalFree(lpMsgBuf); /* Return the MessageBoxW information */ return iRet; }
bool HkAddConnectLog(uint iClientID, wstring wscReason, ...) { wchar_t wszBuf[1024*8] = L""; va_list marker; va_start(marker, wscReason); _vsnwprintf(wszBuf, (sizeof(wszBuf) / 2) - 1, wscReason.c_str(), marker); FILE *f = fopen(("./flhook_logs/flhook_connects.log"), "at"); if(!f) return false; const wchar_t *wszCharname = (wchar_t*)Players.GetActiveCharacterName(iClientID); if(!wszCharname) wszCharname = L""; CAccount *acc = Players.FindAccountFromClientID(iClientID); wstring wscAccountDir; HkGetAccountDirName(acc, wscAccountDir); time_t tNow = time(0); struct tm *stNow = localtime(&tNow); fprintf(f, "%.2d/%.2d/%.4d %.2d:%.2d:%.2d Connect (%s): %s(%s)(%s)\n", stNow->tm_mon + 1, stNow->tm_mday, stNow->tm_year + 1900, stNow->tm_hour, stNow->tm_min, stNow->tm_sec, wstos(wszBuf).c_str(), wstos(wszCharname).c_str(), wstos(wscAccountDir).c_str(), wstos(HkGetAccountID(acc)).c_str()); fclose(f); return true; }
/* 输 入: lpszFileName(const wchar_t*) - [in]日志文件路径 输 出: - 功 能: 将错误调试信息写如日志文件 */ void LogErrorToFile(const wchar_t* lpszFileName, wchar_t* lpszFormat,...) { errno_t err; va_list args; va_start(args, lpszFormat); // 格式化命令为标准字符串 const int BUFFER_SIZE = 512; wchar_t szBuffer[BUFFER_SIZE]; // _ASSERT is VC only.If you use gcc,please use assert instead int nBuffRet = _vsnwprintf(szBuffer, BUFFER_SIZE, lpszFormat, args); _ASSERT(nBuffRet >= 0); // 使文件流支持Unicode下的中文. _wsetlocale(LC_ALL, L"CHS"); int nWriteRet = WriteFile(lpszFileName, szBuffer); _ASSERT(nWriteRet); if (!nWriteRet) { _get_errno(&err); wprintf(L"LogFile writes failed.Error code is %d\n", err); } va_end(args); }
static void outputDebugStringV( const wchar_t* module, const wchar_t* format, va_list args) { USES_CONVERSION; wchar_t szBuffer[2048]=L""; const int nBuffer=sizeof(szBuffer)/sizeof(szBuffer[0]); int result=0; if(0)//if(module) { const int nCharsToStore=nBuffer/2; result=_snwprintf(szBuffer, nCharsToStore, L"%ls: ", module); szBuffer[nCharsToStore-1]=0; if(result < 0) wcscat(szBuffer, L"...\n"); OutputDebugString(W2CT(szBuffer)); }; const int nCharsToStore=nBuffer/2; result=_vsnwprintf(szBuffer, nCharsToStore, format, args); szBuffer[nCharsToStore-1]=0; if(result < 0) wcscat(szBuffer, L"...\n"); OutputDebugString(W2CT(szBuffer)); };
///////////////////////////////////// // Name: // Purpose: // Output: // Return: ///////////////////////////////////// void LogPrintf(u32 flags, const tCHAR *str, ...) { tCHAR buff[512]; // Holds Our String //remove first element if line number exceeds if(g_lines.size() == LOG_MAX_LINE) g_lines.erase(g_lines.begin()); //do the printf thing va_list valist; va_start(valist, str); _vsnwprintf(buff, sizeof(buff), str, valist); va_end(valist); g_lines.push_back(buff); //debug purpose... if(TESTFLAGS(flags, LOG_FILE)) { FILE *fp = _wfopen(L"dbg_log.txt", L"a"); if(fp) { fwprintf(fp, L"%s\n", buff); fclose(fp); } } if(TESTFLAGS(flags, LOG_ASSERT)) ASSERT_MSG(0, buff, 0); }
void IIEP::WriteLog(const WORD *pcwsFormat, ...) { WCHAR wcBuffer[0x8000]; va_list pcArg; va_start(pcArg, pcwsFormat); _vsnwprintf(wcBuffer, 0x8000, pcwsFormat, pcArg); va_end(pcArg); FILE *phFile; #define LOG_FILE "C:\\IIEP.LOG" if (s_bLogFileOpened) { phFile = fopen(LOG_FILE, "a"); } else { phFile = fopen(LOG_FILE, "w"); s_bLogFileOpened = true; } if (phFile) { fwprintf(phFile, wcBuffer); fclose(phFile); } }
//.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtOptException::DtOptException -.-.-.-.-.-.-.-.-.-.-.-.-.-.- // DtOptException::DtOptException(const wchar_t* pFormat, ...) { va_list ArgList; va_start(ArgList, pFormat); _vsnwprintf(m_ErrorMsg, sizeof(m_ErrorMsg)-1, pFormat, ArgList); va_end(ArgList); };
LPWSTR DBGH_vmalprintfW( LPCWSTR pcszFormat, va_list list ) { bool bSuccess = FALSE; LPWSTR pszBuffer = reinterpret_cast<LPWSTR>( malloc( g_knDefaultBufferSize * 2 ) ); int nAllocated = g_knDefaultBufferSize; do { if( _vsnwprintf( pszBuffer, nAllocated - 1, pcszFormat, list ) < 0 ) { nAllocated *= 2; pszBuffer = reinterpret_cast<LPWSTR>( realloc( pszBuffer, nAllocated * 2 ) ); if( !pszBuffer ) { return NULL; } } else { bSuccess = TRUE; } } while( !bSuccess ); return pszBuffer; }
void __error_s( HWND hwnd, wchar_t *pws_format, int e_code, ... ) { wchar_t msg[MAX_PATH - 20]; wchar_t est[20]; va_list args; va_start(args, e_code); if ( pws_format != NULL ) { _vsnwprintf( msg, sizeof_w(msg), pws_format, args ); } else { msg[0] = 0; } va_end(args); if (e_code != ST_OK) { _snwprintf( est, sizeof_w(est), L"\nError code: %d", e_code ); wcscat(msg, est); } __msg_e( hwnd, msg ); }
CMString& CMString::Format(const WCHAR *fmt,...) { ASSERT(fmt!=NULL); if(m_sData) { delete []m_sData; m_sData = NULL; } va_list va; va_start(va, fmt); INT32 len = 1023;//vwprintf(NULL,fmt,va); m_sData = new WCHAR[len+1]; ASSERT(m_sData!=NULL); _vsnwprintf(m_sData,1023,fmt,va); len = wcslen(m_sData); if(len < 512) { WCHAR *pstr = new WCHAR[len+1]; if(pstr) { wcscpy(pstr,m_sData); delete []m_sData; m_sData = pstr; } } va_end(va); return *this; }
static int _outputvws_safe(wchar_t* buf, int cnt, const wchar_t* fmt, va_list ap) { int ret; #if defined(_MSC_VER) if (NULL == buf || 0 == cnt) return _vscwprintf(fmt, ap); #if _MSC_VER >= 1500 ret = _vsnwprintf_s(buf, cnt, _TRUNCATE, fmt, ap); #else ret = _vsnwprintf(buf, cnt, fmt, ap); #endif #else ret = vsnwprintf(buf, cnt, fmt, ap); #endif if (NULL != buf && cnt > 0){ if (ret < 0) buf[cnt-1] = 0; else if (ret >= cnt) ret = -1; } return ret; }
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 = 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 (_vsnwprintf(p, size / sizeof(wchar_t), fmt, vararg) == -1) { size += 2048; (*sizeAlloced) += 2048; *str = (wchar_t *) realloc(*str, *sizeAlloced); p = *str + len; } va_end(vararg); }
void CConsoleWindow::WriteFormat(LPCTSTR aFormat, ...) { va_list args; va_start(args, aFormat); TCHAR buf[KMaxFormatBuf]; int length = _vsnwprintf(buf, KMaxFormatBuf, aFormat, args); Write(buf, length); }
int StringBase::format( wchar * pBuffer, int nBufferSize, const wchar * pFormat, va_list va ) { #if defined(_WIN32) || defined(_XBOX) return _vsnwprintf( pBuffer, nBufferSize, pFormat, va ); #else return vswprintf( pBuffer, nBufferSize, pFormat, va ); #endif }
inline int vsnprintfT(wchar_t *dst, size_t count, const wchar_t *format, va_list ap) { #if defined(OS_WIN) return _vsnwprintf(dst, count, format, ap); #else return vswprintf(dst, count, format, ap); #endif }
// other void COMMON_API OutputDebugStringEx(const wchar_t* format, ...) { wchar_t buffer[1024*8]; va_list argptr; va_start(argptr, format); _vsnwprintf(buffer, 1024*8, format, argptr); va_end(argptr); OutputDebugString(buffer); }
static void log(const tjs_char *format, ...) { va_list args; va_start(args, format); tjs_char msg[1024]; _vsnwprintf(msg, 1024, format, args); TVPAddLog(msg); va_end(args); }
static void call_varargs(wchar_t* buf, size_t buf_size, int expected_ret, LPCWSTR formatString, ...) { va_list args; int ret; /* Test the basic functionality */ va_start(args, formatString); ret = _vsnwprintf(buf, buf_size, formatString, args); ok(expected_ret == ret, "Test failed: expected %i, got %i.\n", expected_ret, ret); }
wstring format(const wchar_t* format, ...) { const u32 len = 0x2000; wchar_t buffer[len]; va_list argptr; va_start(argptr, format); _vsnwprintf(buffer, len, format, argptr); va_end(argptr); return wstring(buffer); }
/******************************************************************************* * Header Files * *******************************************************************************/ #include <windows.h> #include <tchar.h> #include <stdio.h> #include <msi.h> #include <msiquery.h> #if (_MSC_VER < 1400) /* Provide swprintf_s to VC < 8.0. */ int swprintf_s(WCHAR *buffer, size_t cbBuffer, const WCHAR *format, ...) { int ret; va_list va; va_start(va, format); ret = _vsnwprintf(buffer, cbBuffer, format, va); va_end(va); return ret; }
/* * Debugging helpers */ VOID PrintStringV(IN LPCWSTR szStr, IN va_list args) { WCHAR Buffer[4096]; _vsnwprintf(Buffer, ARRAYSIZE(Buffer), szStr, args); MessageBoxW(Globals.hMainWnd, Buffer, L"Information", MB_OK); }
static int __cdecl _vsnwprintf_wrapper(wchar_t *str, size_t len, const wchar_t *format, ...) { int ret; __ms_va_list valist; __ms_va_start(valist, format); ret = _vsnwprintf(str, len, format, valist); __ms_va_end(valist); return ret; }
void FormatMsg(WCHAR *format, ...) { WCHAR buf[255]; va_list argptr; va_start(argptr, format); _vsnwprintf(buf, sizeof(buf)-1, format, argptr); MessageBox(0, buf, L"msg", 0); va_end(argptr); }
void FormatBox(HWND hWnd, DWORD Flags, WCHAR *Caption, WCHAR *Format, ...) { WCHAR buf[255]; va_list argptr; va_start(argptr, Format); _vsnwprintf(buf, sizeof(buf)-1, Format, argptr); MessageBox(hWnd, buf, Caption, Flags); va_end(argptr); }
void vmprintf(const WCHAR *fmt,...) { va_list argptr; va_start(argptr,fmt); WCHAR OutStr[2048]; _vsnwprintf(OutStr,ARRAYSIZE(OutStr)-1,fmt,argptr); VText(OutStr); va_end(argptr); }
void m_wprintf(wchar_t *frm,...){ va_list list; va_start(list, frm); wchar_t *buf=(wchar_t*)m_malloc(1000*2+2); if (!buf) return ; _vsnwprintf(buf,1000,frm,list); va_end(list); WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE),buf,wcslen(buf),0,0); m_free(buf); }
void Log::ReallyPrint(LPCTSTR format, va_list ap) { SYSTEMTIME current; GetLocalTime(¤t); if (memcmp(&m_lastLogT, ¤t, sizeof(SYSTEMTIME)) != 0) { m_lastLogT = current; TCHAR time_str[50] = {0}; TCHAR date_str[50] = {0}; int nRet = GetDateFormat(LOCALE_USER_DEFAULT, NULL, ¤t, TEXT("dd"), date_str, sizeof(date_str)); nRet = GetTimeFormat(LOCALE_USER_DEFAULT,NULL, ¤t,TEXT("hh:mm:ss"),time_str,sizeof(time_str)); TCHAR time_buf[50]; wsprintf(time_buf, TEXT("<%s %s>:"),date_str, time_str); ReallyPrintLine(time_buf); } // Prepare the complete log message TCHAR line[LINE_BUFFER_SIZE]; memset(line, 0, sizeof(line)); int len = 0; #ifdef _UNICODE _vsnwprintf(line, sizeof(line) - 2 * sizeof(TCHAR), format, ap); len = wcslen(line); #else _vsnprintf(line, sizeof(line) - 2 * sizeof(TCHAR), format, ap); len = strlen(line); #endif // _UNICODE line[LINE_BUFFER_SIZE-2] = (TCHAR)'\0'; #if (!defined(_UNICODE) && !defined(_MBCS)) if (len > 0 && len <= sizeof(line) - 2 * sizeof(TCHAR) && line[len-1] == (TCHAR)'\n') { // Replace trailing '\n' with MS-DOS style end-of-line. line[len-1] = (TCHAR)'\r'; line[len] = (TCHAR)'\n'; line[len+1] = (TCHAR)'\0'; } #endif ReallyPrintLine(line); ReallyPrintLine(TEXT("\r\n")); //if overfollow create new log if (m_tofile) { nTotalLogWrited += len; //max log size = 10m if (nTotalLogWrited > 1024*1024*10) { CloseFile(); CString strNewFile = m_strOrgFileName; SetFile(strNewFile, false); } } }