Skip to content

Commit

Permalink
Fix comment.
Browse files Browse the repository at this point in the history
  • Loading branch information
bhaible committed Dec 13, 2009
1 parent 192668d commit 9c55098
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 15 deletions.
4 changes: 4 additions & 0 deletions libcharset/lib/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
2009-12-13 Bruno Haible <bruno@clisp.org>

* localcharset.c (locale_charset): Fix comment about use of GetACP.

2009-12-12 Bruno Haible <bruno@clisp.org>

* localcharset.c (locale_charset): Add comment about use of GetACP.
Expand Down
34 changes: 19 additions & 15 deletions libcharset/lib/localcharset.c
Original file line number Diff line number Diff line change
Expand Up @@ -370,7 +370,7 @@ locale_charset (void)
codeset = nl_langinfo (CODESET);

# ifdef __CYGWIN__
/* Cygwin 2006 does not have locales. nl_langinfo (CODESET) always
/* Cygwin 1.5.x does not have locales. nl_langinfo (CODESET) always
returns "US-ASCII". As long as this is not fixed, return the suffix
of the locale name from the environment variables (if present) or
the codepage as a number. */
Expand Down Expand Up @@ -410,7 +410,17 @@ locale_charset (void)
}
}

/* Woe32 has a function returning the locale's codepage as a number. */
/* Woe32 has a function returning the locale's codepage as a number:
GetACP(). This encoding is used by Cygwin, unless the user has set
the environment variable CYGWIN=codepage:oem (which very few people
do).
Output directed to console windows needs to be converted (to
GetOEMCP() if the console is using a raster font, or to
GetConsoleOutputCP() if it is using a TrueType font). Cygwin does
this conversion transparently (see winsup/cygwin/fhandler_console.cc),
converting to GetConsoleOutputCP(). This leads to correct results,
except when SetConsoleOutputCP has been called and a raster font is
in use. */
sprintf (buf, "CP%u", GetACP ());
codeset = buf;
}
Expand Down Expand Up @@ -450,19 +460,13 @@ locale_charset (void)

static char buf[2 + 10 + 1];

/* Woe32 has a function returning the locale's codepage as a number.
When the output goes to a console window, in Windows 95, it would have
been appropriate to use GetOEMCP() instead of GetACP(). But this has
been corrected: In Windows XP SP3, consoles accept output in the
GetACP() encoding. The GetConsoleOutputCP() function still returns
the same as GetOEMCP() (not GetACP()!), but the font handling in the
console actually uses the GetACP() encoding. If you want to "correct"
this by calling SetConsoleOutputCP(GetACP()), then for a TrueType font
it has no visible effect on the displayed glyphs, whereas when a raster
font is in use, the console performs an extra conversion from GetOEMCP()
to GetACP() encoding, thus changing the effective codepage of the
console from GetACP() to GetOEMCP()! In summary, GetConsoleOutputCP()
and SetConsoleOutputCP() are now completely broken. */
/* Woe32 has a function returning the locale's codepage as a number:
GetACP().
When the output goes to a console window, it needs to be provided in
GetOEMCP() encoding if the console is using a raster font, or in
GetConsoleOutputCP() encoding if it is using a TrueType font.
But in GUI programs and for output sent to files and pipes, GetACP()
encoding is the best bet. */
sprintf (buf, "CP%u", GetACP ());
codeset = buf;

Expand Down

0 comments on commit 9c55098

Please sign in to comment.