Index: Lang.cpp =================================================================== --- Lang.cpp (revision 835) +++ Lang.cpp (working copy) @@ -88,8 +88,10 @@ int n = ::GetLocaleInfo(GetUserDefaultLCID(), type, h, 256); return n ? WString(h, n - 1).ToString() : String(); #else - char h[256]; - int n =:: GetLocaleInfo(GetUserDefaultLCID(), type, h, 256); + int n = ::GetLocaleInfo(GetUserDefaultLCID(), type, NULL, 0); + char* h = static_cast(_alloca(n)); + + n = ::GetLocaleInfo(GetUserDefaultLCID(), type, h, n); return n ? String(h, n - 1) : String(); #endif } @@ -170,13 +172,17 @@ String GetLocaleInfoA(LCID lcid, LCTYPE lctype) { if(IsWinNT()) { - wchar cbuf[1000]; - UnicodeWin32().GetLocaleInfoW(lcid, lctype, cbuf, __countof(cbuf)); + int n = UnicodeWin32().GetLocaleInfoW(lcid, lctype, NULL, 0); + wchar* cbuf = static_cast(_alloca(n * sizeof(wchar))); + + UnicodeWin32().GetLocaleInfoW(lcid, lctype, cbuf, n); return FromSystemCharsetW(cbuf); } else { - char cbuf[1000]; - ::GetLocaleInfoA(lcid, lctype, cbuf, __countof(cbuf)); + int n = ::GetLocaleInfoA(lcid, lctype, NULL, 0); + char* cbuf = static_cast(_alloca(n)); + + ::GetLocaleInfoA(lcid, lctype, cbuf, n); return FromSystemCharset(cbuf); } } @@ -184,17 +190,18 @@ WString GetLocaleInfoW(LCID lcid, LCTYPE lctype) { - union { - wchar wbuf[1000]; - char abuf[1000]; - }; - Zero(wbuf); - if(::GetLocaleInfoW(lcid, lctype, (WCHAR *)wbuf, __countof(wbuf))) + int n = ::GetLocaleInfoW(lcid, lctype, NULL, 0); + wchar* wbuf = static_cast(_alloca(n * sizeof(wchar))); + + if(::GetLocaleInfoW(lcid, lctype, (WCHAR *)wbuf, n)) return wbuf; #ifdef PLATFORM_WINCE return Null; #else - ::GetLocaleInfoA(lcid, lctype, abuf, __countof(abuf)); + n = ::GetLocaleInfoA(lcid, lctype, NULL, 0); + char* abuf = static_cast(_alloca(n)); + + ::GetLocaleInfoA(lcid, lctype, abuf, n); return ToUnicode(abuf, CHARSET_DEFAULT); #endif }