144 lines
3.9 KiB
Diff
144 lines
3.9 KiB
Diff
iff --git a/gdb/valprint.c b/gdb/valprint.c
|
|
index 0ecea0c..7e864f6 100644
|
|
--- a/gdb/valprint.c
|
|
+++ b/gdb/valprint.c
|
|
@@ -1929,73 +1929,79 @@ print_wchar (gdb_wint_t w, const gdb_byte *orig,
|
|
int need_escape = *need_escapep;
|
|
|
|
*need_escapep = 0;
|
|
- if (gdb_iswprint (w) && (!need_escape || (!gdb_iswdigit (w)
|
|
- && w != LCST ('8')
|
|
- && w != LCST ('9'))))
|
|
- {
|
|
- gdb_wchar_t wchar = w;
|
|
|
|
- if (w == gdb_btowc (quoter) || w == LCST ('\\'))
|
|
- obstack_grow_wstr (output, LCST ("\\"));
|
|
- obstack_grow (output, &wchar, sizeof (gdb_wchar_t));
|
|
- }
|
|
- else
|
|
+ /* iswprint implementation returns 1 on mingw hosts.
|
|
+ In order to avoid different printout on this host,
|
|
+ we explicitly use wchar_printable function. */
|
|
+ switch (w)
|
|
{
|
|
- switch (w)
|
|
+ case LCST ('\a'):
|
|
+ obstack_grow_wstr (output, LCST ("\\a"));
|
|
+ break;
|
|
+ case LCST ('\b'):
|
|
+ obstack_grow_wstr (output, LCST ("\\b"));
|
|
+ break;
|
|
+ case LCST ('\f'):
|
|
+ obstack_grow_wstr (output, LCST ("\\f"));
|
|
+ break;
|
|
+ case LCST ('\n'):
|
|
+ obstack_grow_wstr (output, LCST ("\\n"));
|
|
+ break;
|
|
+ case LCST ('\r'):
|
|
+ obstack_grow_wstr (output, LCST ("\\r"));
|
|
+ break;
|
|
+ case LCST ('\t'):
|
|
+ obstack_grow_wstr (output, LCST ("\\t"));
|
|
+ break;
|
|
+ case LCST ('\v'):
|
|
+ obstack_grow_wstr (output, LCST ("\\v"));
|
|
+ break;
|
|
+ default:
|
|
{
|
|
- case LCST ('\a'):
|
|
- obstack_grow_wstr (output, LCST ("\\a"));
|
|
- break;
|
|
- case LCST ('\b'):
|
|
- obstack_grow_wstr (output, LCST ("\\b"));
|
|
- break;
|
|
- case LCST ('\f'):
|
|
- obstack_grow_wstr (output, LCST ("\\f"));
|
|
- break;
|
|
- case LCST ('\n'):
|
|
- obstack_grow_wstr (output, LCST ("\\n"));
|
|
- break;
|
|
- case LCST ('\r'):
|
|
- obstack_grow_wstr (output, LCST ("\\r"));
|
|
- break;
|
|
- case LCST ('\t'):
|
|
- obstack_grow_wstr (output, LCST ("\\t"));
|
|
- break;
|
|
- case LCST ('\v'):
|
|
- obstack_grow_wstr (output, LCST ("\\v"));
|
|
- break;
|
|
- default:
|
|
- {
|
|
- int i;
|
|
+ if (wchar_printable (w)
|
|
+ && (!sevenbit_strings || (w >= 0 && w < 0x7f))
|
|
+ && (!need_escape || (!gdb_iswdigit (w)
|
|
+ && w != LCST ('8')
|
|
+ && w != LCST ('9'))))
|
|
+ {
|
|
+ gdb_wchar_t wchar = w;
|
|
|
|
- for (i = 0; i + width <= orig_len; i += width)
|
|
- {
|
|
- char octal[30];
|
|
- ULONGEST value;
|
|
+ if (w == gdb_btowc (quoter) || w == LCST ('\\'))
|
|
+ obstack_grow_wstr (output, LCST ("\\"));
|
|
+ obstack_grow (output, &wchar, sizeof (gdb_wchar_t));
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ int i;
|
|
+
|
|
+ for (i = 0; i + width <= orig_len; i += width)
|
|
+ {
|
|
+ char octal[30];
|
|
+ ULONGEST value;
|
|
|
|
- value = extract_unsigned_integer (&orig[i], width,
|
|
+ value = extract_unsigned_integer (&orig[i], width,
|
|
byte_order);
|
|
- /* If the value fits in 3 octal digits, print it that
|
|
- way. Otherwise, print it as a hex escape. */
|
|
- if (value <= 0777)
|
|
- xsnprintf (octal, sizeof (octal), "\\%.3o",
|
|
- (int) (value & 0777));
|
|
- else
|
|
- xsnprintf (octal, sizeof (octal), "\\x%lx", (long) value);
|
|
- append_string_as_wide (octal, output);
|
|
- }
|
|
- /* If we somehow have extra bytes, print them now. */
|
|
- while (i < orig_len)
|
|
- {
|
|
- char octal[5];
|
|
+ /* If the value fits in 3 octal digits, print it that
|
|
+ way. Otherwise, print it as a hex escape. */
|
|
+ if (value <= 0777)
|
|
+ xsnprintf (octal, sizeof (octal), "\\%.3o",
|
|
+ (int) (value & 0777));
|
|
+ else
|
|
+ xsnprintf (octal, sizeof (octal), "\\x%lx", (long)value);
|
|
+ append_string_as_wide (octal, output);
|
|
+ }
|
|
+ /* If we somehow have extra bytes, print them now. */
|
|
+ while (i < orig_len)
|
|
+ {
|
|
+ char octal[5];
|
|
|
|
- xsnprintf (octal, sizeof (octal), "\\%.3o", orig[i] & 0xff);
|
|
- append_string_as_wide (octal, output);
|
|
- ++i;
|
|
- }
|
|
+ xsnprintf (octal, sizeof (octal), "\\%.3o", orig[i] & 0xff);
|
|
+ append_string_as_wide (octal, output);
|
|
+ ++i;
|
|
+ }
|
|
|
|
- *need_escapep = 1;
|
|
- }
|
|
+ *need_escapep = 1;
|
|
+ }
|
|
break;
|
|
}
|
|
}
|