Skip to content

Commit

Permalink
Merge pull request #2004 from randomstuff/stringutil-c-locale
Browse files Browse the repository at this point in the history
Use the C locale for non-Windows CharArrayFromFormatV() and StringFromFormat()
  • Loading branch information
degasus committed Feb 25, 2015
2 parents 792e166 + 266d50c commit d6ccbb1
Showing 1 changed file with 21 additions and 0 deletions.
21 changes: 21 additions & 0 deletions Source/Core/Common/StringUtil.cpp
Expand Up @@ -22,9 +22,18 @@
#include <Windows.h>
#else
#include <iconv.h>
#include <locale.h>
#include <errno.h>
#endif

#if !defined(_WIN32) && !defined(ANDROID)
static locale_t GetCLocale()
{
static locale_t c_locale = newlocale(LC_ALL_MASK, "C", NULL);
return c_locale;
}
#endif

// faster than sscanf
bool AsciiToHex(const std::string& _szValue, u32& result)
{
Expand Down Expand Up @@ -77,7 +86,13 @@ bool CharArrayFromFormatV(char* out, int outsize, const char* format, va_list ar
c_locale = _create_locale(LC_ALL, ".1252");
writtenCount = _vsnprintf_l(out, outsize, format, c_locale, args);
#else
#if !defined(ANDROID)
locale_t previousLocale = uselocale(GetCLocale());
#endif
writtenCount = vsnprintf(out, outsize, format, args);
#if !defined(ANDROID)
uselocale(previousLocale);
#endif
#endif

if (writtenCount > 0 && writtenCount < outsize)
Expand Down Expand Up @@ -112,8 +127,14 @@ std::string StringFromFormatV(const char* format, va_list args)
std::string temp = buf;
delete[] buf;
#else
#if !defined(ANDROID)
locale_t previousLocale = uselocale(GetCLocale());
#endif
if (vasprintf(&buf, format, args) < 0)
ERROR_LOG(COMMON, "Unable to allocate memory for string");
#if !defined(ANDROID)
uselocale(previousLocale);
#endif

std::string temp = buf;
free(buf);
Expand Down

0 comments on commit d6ccbb1

Please sign in to comment.