CMake/Source/cmLocale.h
Domen Vrankar 36bc7e4c3f store old locale to a temporary variable
On Windows XP 32 bit setLocale seems to
cause old pointer invalidation and causes
program crash in destructor.
This was causing CPackZIP to crash so to
fix it we copy the value into a temporary
variable.
2016-12-25 10:51:34 +01:00

25 lines
489 B
C++

/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file Copyright.txt or https://cmake.org/licensing for details. */
#ifndef cmLocale_h
#define cmLocale_h
#include <cmConfigure.h>
#include <locale.h>
#include <string>
class cmLocaleRAII
{
std::string OldLocale;
public:
cmLocaleRAII()
: OldLocale(setlocale(LC_CTYPE, CM_NULLPTR))
{
setlocale(LC_CTYPE, "");
}
~cmLocaleRAII() { setlocale(LC_CTYPE, this->OldLocale.c_str()); }
};
#endif