From 2b0c683dedd6a6a0dffecc42146e293bb9807e59 Mon Sep 17 00:00:00 2001 From: Clinton Stimpson <clinton@elemtech.com> Date: Tue, 12 Nov 2013 17:32:42 -0700 Subject: [PATCH] Encoding: Default to ANSI code page on Windows Create a KWSYS_ENCODING_DEFAULT_CODEPAGE setting that can be used by parent projects to configure the default code page. Default to CP_ACP (ANSI Code Page) so that our narrow->wide conversions used to access wide Windows APIs are equivalent to direct use of the narrow Windows APIs. Change-Id: I02ce362dbdc6127f42b7af7e620e46b7829cbc64 --- CMakeLists.txt | 11 +++++++++++ EncodingC.c | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 03b1dd6..c2b377d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -166,6 +166,11 @@ ELSE(KWSYS_LFS_DISABLE) SET(KWSYS_LFS_REQUESTED 1) ENDIF(KWSYS_LFS_DISABLE) +# Specify default 8 bit encoding for Windows +IF(NOT KWSYS_ENCODING_DEFAULT_CODEPAGE) + SET(KWSYS_ENCODING_DEFAULT_CODEPAGE CP_ACP) +ENDIF(NOT KWSYS_ENCODING_DEFAULT_CODEPAGE) + # Enable testing if building standalone. IF(KWSYS_STANDALONE) INCLUDE(Dart) @@ -1074,6 +1079,12 @@ IF(KWSYS_USE_String) COMPILE_FLAGS "-DKWSYS_STRING_C") ENDIF(KWSYS_USE_String) +IF(KWSYS_USE_Encoding) + # Set default 8 bit encoding in "EndcodingC.c". + SET_PROPERTY(SOURCE EncodingC.c APPEND PROPERTY COMPILE_DEFINITIONS + KWSYS_ENCODING_DEFAULT_CODEPAGE=${KWSYS_ENCODING_DEFAULT_CODEPAGE}) +ENDIF(KWSYS_USE_Encoding) + #----------------------------------------------------------------------------- # Setup testing if not being built as part of another project. IF(KWSYS_STANDALONE OR CMake_SOURCE_DIR) diff --git a/EncodingC.c b/EncodingC.c index feff969..a36eecc 100644 --- a/EncodingC.c +++ b/EncodingC.c @@ -31,7 +31,7 @@ size_t kwsysEncoding_mbstowcs(wchar_t* dest, const char* str, size_t n) return (size_t)-1; } #ifdef _WIN32 - return MultiByteToWideChar(CP_UTF8, 0, + return MultiByteToWideChar(KWSYS_ENCODING_DEFAULT_CODEPAGE, 0, str, -1, dest, (int)n) - 1; #else return mbstowcs(dest, str, n); @@ -58,7 +58,7 @@ size_t kwsysEncoding_wcstombs(char* dest, const wchar_t* str, size_t n) return (size_t)-1; } #ifdef _WIN32 - return WideCharToMultiByte(CP_UTF8, 0, str, -1, + return WideCharToMultiByte(KWSYS_ENCODING_DEFAULT_CODEPAGE, 0, str, -1, dest, (int)n, NULL, NULL) - 1; #else return wcstombs(dest, str, n); -- GitLab