[RFA] defs.h: Define GDB_DEFAULT_TARGET_[WIDE_]CHARSET for Cygwin and MingW builds

Corinna Vinschen
2010-02-28T13:05:08Z

Hi,

today I tested the wide char printing in GDB for the furst time on a
Cygwin build and it didn't work well. The reson was that the default
for GDB_DEFAULT_TARGET_WIDE_CHARSET is UTF-32, which is bad for a system
defining wchar_t to be UTF-16. That's Windows for you.

So I applied the below patch, which makes GDB for Cygwin happy. I also
set the GDB_DEFAULT_TARGET_CHARSET for Cygwin and Win32 to a more sane
default for both systems.

Ok to apply?

Thanks,
Corinna

* defs.h (GDB_DEFAULT_TARGET_WIDE_CHARSET): Define as UTF-16 for
Windows-based systems.
(GDB_DEFAULT_TARGET_CHARSET): Set to UTF-8 for Cygwin and CP1252
for other Windows-based systems.

Index: defs.h
===================================================================
RCS file: /cvs/src/src/gdb/defs.h,v
retrieving revision 1.265
diff -u -p -r1.265 defs.h
--- defs.h 25 Feb 2010 20:30:58 -0000 1.265
+++ defs.h 28 Feb 2010 13:04:26 -0000
@@ -1192,6 +1192,22 @@ extern int use_windows;
#define ISATTY(FP) (isatty (fileno (FP)))
#endif

+/* The default wide character charset is UTF-32, which is wrong for
+ Windows-based systems which use UTF-16. */
+#if defined (__CYGWIN__) || defined (_WIN32)
+#define GDB_DEFAULT_TARGET_WIDE_CHARSET "UTF-16"
+#endif
+
+/* The default output charset for Cygwin is UTF-8. The default output
+ charset for Win32 is the default ANSI codepage of the system, which
+ depends on the localization of the underlying Windows system. However,
+ CP1252 is a good default replacement for ISO-8859-1 at least. */
+#if defined (__CYGWIN__)
+#define GDB_DEFAULT_TARGET_CHARSET "UTF-8"
+#elif defined (_WIN32)
+#define GDB_DEFAULT_TARGET_CHARSET "CP1252"
+#endif
+
/* Ensure that V is aligned to an N byte boundary (B's assumed to be a
power of 2). Round up/down when necessary. Examples of correct
use include:

--
Corinna Vinschen
Cygwin Project Co-Leader
Red Hat