diff options
author | Jose <jose@zeroc.com> | 2012-07-13 00:18:06 +0200 |
---|---|---|
committer | Jose <jose@zeroc.com> | 2012-07-13 00:18:06 +0200 |
commit | 70802b63320582f0afa8229659ea9fe4a21d02ec (patch) | |
tree | eb455947cc774cc558f96b8d7c78373d2a6f1c2b /cpp/src/IceUtil/StringUtil.cpp | |
parent | ICE-4839 - Glacier2 sessionHelper IceSSL plug-in (diff) | |
download | ice-70802b63320582f0afa8229659ea9fe4a21d02ec.tar.bz2 ice-70802b63320582f0afa8229659ea9fe4a21d02ec.tar.xz ice-70802b63320582f0afa8229659ea9fe4a21d02ec.zip |
WinRT support
Diffstat (limited to 'cpp/src/IceUtil/StringUtil.cpp')
-rw-r--r-- | cpp/src/IceUtil/StringUtil.cpp | 64 |
1 files changed, 56 insertions, 8 deletions
diff --git a/cpp/src/IceUtil/StringUtil.cpp b/cpp/src/IceUtil/StringUtil.cpp index 64237c25a41..0be8561f18d 100644 --- a/cpp/src/IceUtil/StringUtil.cpp +++ b/cpp/src/IceUtil/StringUtil.cpp @@ -497,31 +497,79 @@ IceUtilInternal::errorToString(int error, LPCVOID source) { if(error < WSABASEERR) { +#ifndef ICE_OS_WINRT LPVOID lpMsgBuf = 0; - DWORD ok = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | +#else + int size = 256; + auto_ptr<BYTE> lpMsgBuf = auto_ptr<BYTE>(new BYTE[size]); +#endif + DWORD ok = 0; +#ifdef ICE_OS_WINRT + while(true) + { +#endif + ok = FormatMessageW( +#ifndef ICE_OS_WINRT + FORMAT_MESSAGE_ALLOCATE_BUFFER | +#endif + FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | (source != NULL ? FORMAT_MESSAGE_FROM_HMODULE : 0), source, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language - (LPTSTR)&lpMsgBuf, +#ifndef ICE_OS_WINRT + (LPWSTR)&lpMsgBuf, +#else + (LPWSTR)lpMsgBuf.get(), +#endif 0, NULL); +#ifdef ICE_OS_WINRT + if(!ok && size < 65536) + { + DWORD err = GetLastError(); + if(err == ERROR_INSUFFICIENT_BUFFER) + { + size *= 4; + size = max(size, 65536); + lpMsgBuf = auto_ptr<BYTE>(new BYTE[size]); + continue; + } + } + break; + } +#endif + if(ok) { - LPCTSTR msg = (LPCTSTR)lpMsgBuf; - assert(msg && strlen((const char*)msg) > 0); - string result = (const char*)msg; +#ifndef ICE_OS_WINRT + LPWSTR msg = (LPWSTR)lpMsgBuf; +#else + LPWSTR msg = (LPWSTR)lpMsgBuf.get(); +#endif + assert(msg && wcslen((const wchar_t*)msg) > 0); + wstring result = (const wchar_t*)msg; if(result[result.length() - 1] == '\n') { result = result.substr(0, result.length() - 2); } - LocalFree(lpMsgBuf); - return result; +#ifndef ICE_OS_WINRT + if(lpMsgBuf) + { + LocalFree(lpMsgBuf); + } +#endif + return IceUtil::wstringToString(result); } else { +#ifndef ICE_OS_WINRT + if(lpMsgBuf) + { + LocalFree(lpMsgBuf); + } +#endif ostringstream os; os << "unknown error: " << error; return os.str(); |