| Index: src/gpu/GrAutoLocaleSetter.h
|
| diff --git a/src/gpu/GrAutoLocaleSetter.h b/src/gpu/GrAutoLocaleSetter.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..dd17bbef68637c6e5f35625beaac3ccb262d8bbf
|
| --- /dev/null
|
| +++ b/src/gpu/GrAutoLocaleSetter.h
|
| @@ -0,0 +1,64 @@
|
| +/*
|
| + * Copyright 2015 Google Inc.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + */
|
| +
|
| +#ifndef GrAutoLocaleSetter_DEFINED
|
| +#define GrAutoLocaleSetter_DEFINED
|
| +
|
| +#include "GrTypes.h"
|
| +
|
| +#if !defined(SK_BUILD_FOR_ANDROID)
|
| +#include <locale.h>
|
| +#endif
|
| +
|
| +#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS)
|
| +#include <xlocale.h>
|
| +#endif
|
| +
|
| +/**
|
| + * 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.
|
| + */
|
| +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);
|
| + if (fLocale) {
|
| + 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)
|
| + if (fLocale) {
|
| + uselocale(fOldLocale);
|
| + 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
|
| +
|
|
|