aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndre Heinecke <[email protected]>2015-11-30 15:09:40 +0000
committerAndre Heinecke <[email protected]>2015-12-07 13:30:09 +0000
commit823e858cdf5eb6b9945a46478f9876819c16bcd3 (patch)
treee36b987aa7d42918da6b905345b4af8250419a74
parenttests: Fix read past buffer. (diff)
downloadlibgpg-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.
-rw-r--r--src/w32-gettext.c18
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);