diff options
author | bsalomon <bsalomon@google.com> | 2015-03-16 14:00:52 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-03-16 14:00:52 -0700 |
commit | 6f7f2012eed634695dc76aad720d3ee0820bd9d2 (patch) | |
tree | f910b5b871b9da01b28d189845b504cacc40e344 /src/gpu/GrAutoLocaleSetter.h | |
parent | 82b0748f1c440059cf5f33fceef3b94de9e04052 (diff) |
Move GrAutoLocaleSetter to new file and fix issue with null locale
TBR=egdaniel@google.com
NOTREECHECKS=true
Review URL: https://codereview.chromium.org/1002623004
Diffstat (limited to 'src/gpu/GrAutoLocaleSetter.h')
-rw-r--r-- | src/gpu/GrAutoLocaleSetter.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/gpu/GrAutoLocaleSetter.h b/src/gpu/GrAutoLocaleSetter.h new file mode 100644 index 0000000000..dd17bbef68 --- /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 + |