diff options
author | Andre Heinecke <[email protected]> | 2015-11-30 15:09:40 +0000 |
---|---|---|
committer | Andre Heinecke <[email protected]> | 2015-12-07 13:30:09 +0000 |
commit | 823e858cdf5eb6b9945a46478f9876819c16bcd3 (patch) | |
tree | e36b987aa7d42918da6b905345b4af8250419a74 /src/w32-gettext.c | |
parent | tests: Fix read past buffer. (diff) | |
download | libgpg-error-823e858cdf5eb6b9945a46478f9876819c16bcd3.tar.gz libgpg-error-823e858cdf5eb6b9945a46478f9876819c16bcd3.zip |
Fix windows 8bit encoding conversion
* src/w32-gettext.c (wchar_to_native): Convert to ConsoleOutputCP.
--
Just using CP_ACP did not neccessarily convert to the correct
codepage as codepages might differ between ConsoleOutput and
GUI output (which it usually does).
This fixes encoding issues on the Windows commandline.
Diffstat (limited to 'src/w32-gettext.c')
-rw-r--r-- | src/w32-gettext.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/w32-gettext.c b/src/w32-gettext.c index 2eb0289..146de53 100644 --- a/src/w32-gettext.c +++ b/src/w32-gettext.c @@ -1373,17 +1373,25 @@ utf8_to_wchar (const char *string, size_t length, size_t *retlen) } -/* Return a malloced string encoded in UTF-8 from the wide char input - string STRING. Caller must free this value. On failure returns - NULL. The result of calling this function with STRING set to NULL +/* Return a malloced string encoded in the native console codepage + from the wide char input string STRING. + Caller must free this value. On failure returns NULL. + The result of calling this function with STRING set to NULL is not defined. */ static char * wchar_to_native (const wchar_t *string, size_t length, size_t *retlen) { int n; char *result; + unsigned int cpno = GetConsoleOutputCP (); + + /* GetConsoleOutputCP returns the 8-Bit codepage that should be used + for console output. If the codepage is not returned we fall back + to the codepage GUI programs should use (CP_ACP). */ + if (!cpno) + cpno = GetACP (); - n = WideCharToMultiByte (CP_ACP, 0, string, length, NULL, 0, NULL, NULL); + n = WideCharToMultiByte (cpno, 0, string, length, NULL, 0, NULL, NULL); if (n < 0 || (n+1) <= 0) return NULL; @@ -1391,7 +1399,7 @@ wchar_to_native (const wchar_t *string, size_t length, size_t *retlen) if (!result) return NULL; - n = WideCharToMultiByte (CP_ACP, 0, string, length, result, n, NULL, NULL); + n = WideCharToMultiByte (cpno, 0, string, length, result, n, NULL, NULL); if (n < 0) { jnlib_free (result); |