| Index: include/gpu/GrTypesPriv.h
|
| diff --git a/include/gpu/GrTypesPriv.h b/include/gpu/GrTypesPriv.h
|
| index 412de897c6543b851dad3134020c0f9d1788deca..151de1991ac3b7b79525786687f513055bb7b149 100644
|
| --- a/include/gpu/GrTypesPriv.h
|
| +++ b/include/gpu/GrTypesPriv.h
|
| @@ -264,4 +264,51 @@ private:
|
| SkIRect fRect;
|
| };
|
|
|
| +
|
| +/**
|
| + * Helper class for ensuring that we don't use the wrong locale when building shaders. Android
|
| + * doesn't support locale in the NDK, so this is a no-op there.
|
| + */
|
| +#if !defined(SK_BUILD_FOR_ANDROID)
|
| +#include <locale.h>
|
| +#endif
|
| +
|
| +#if defined(SK_BUILD_FOR_MAC)
|
| +#include <xlocale.h>
|
| +#endif
|
| +
|
| +class GrAutoLocaleSetter {
|
| +public:
|
| + GrAutoLocaleSetter (const char* name) {
|
| +#if defined(SK_BUILD_FOR_WIN)
|
| + fOldPerThreadLocale = _configthreadlocale(_ENABLE_PER_THREAD_LOCALE);
|
| + fOldLocale = setlocale(LC_ALL, name);
|
| +#elif !defined(SK_BUILD_FOR_ANDROID)
|
| + fLocale = newlocale(LC_ALL, name, 0);
|
| + fOldLocale = uselocale(fLocale);
|
| +#else
|
| + (void) name; // suppress unused param warning.
|
| +#endif
|
| + }
|
| +
|
| + ~GrAutoLocaleSetter () {
|
| +#if defined(SK_BUILD_FOR_WIN)
|
| + setlocale(LC_ALL, fOldLocale);
|
| + _configthreadlocale(fOldPerThreadLocale);
|
| +#elif !defined(SK_BUILD_FOR_ANDROID)
|
| + SkASSERT(uselocale(fOldLocale) == fLocale);
|
| + freelocale(fLocale);
|
| +#endif
|
| + }
|
| +
|
| +private:
|
| +#if defined(SK_BUILD_FOR_WIN)
|
| + int fOldPerThreadLocale;
|
| + const char* fOldLocale;
|
| +#elif !defined(SK_BUILD_FOR_ANDROID)
|
| + locale_t fOldLocale;
|
| + locale_t fLocale;
|
| +#endif
|
| +};
|
| +
|
| #endif
|
|
|