#define gdb_wcslen wcslen
#define gdb_iswprint iswprint
-#define gdb_iswdigit iswdigit
+#define gdb_iswxdigit iswxdigit
#define gdb_btowc btowc
#define gdb_WEOF WEOF
#define gdb_wcslen strlen
#define gdb_iswprint isprint
-#define gdb_iswdigit isdigit
+#define gdb_iswxdigit isxdigit
#define gdb_btowc /* empty */
#define gdb_WEOF EOF
# An octal escape can only be 3 digits.
gdb_test "print \"\\1011\"" " = \"A1\""
+# The final digit does not need to be escaped here.
+foreach val {0 1 2 3 4 5 6 7 8 9 a b c d e f} {
+ gdb_test "print \"\\0\" \"${val}\"" " = \"\\\\000${val}\""
+}
+
# Tests for wide- or unicode- strings. L is the prefix letter to use,
# either "L" (for wide strings), "u" (for UTF-16), or "U" (for UTF-32).
# NAME is used in the test names and should be related to the prefix
gdb_test "print $L\"\" \"abcdef\" \"g\"" \
"$L\"abcdefg\"" \
"concatenate three strings with empty $name string"
+ gdb_test "print $L\"\\xffef\" $L\"f\"" \
+ "$L\"\\\\xffef\\\\146\"" \
+ "test multi-char escape sequence case for $name"
gdb_test "print $L'a'" "= \[0-9\]+ $L'a'" \
"basic $name character"
break;
default:
{
- if (gdb_iswprint (w) && (!need_escape || (!gdb_iswdigit (w)
- && w != LCST ('8')
- && w != LCST ('9'))))
+ if (gdb_iswprint (w) && !(need_escape && gdb_iswxdigit (w)))
{
gdb_wchar_t wchar = w;
/* 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));
+ {
+ xsnprintf (octal, sizeof (octal), "\\%.3o",
+ (int) (value & 0777));
+ *need_escapep = false;
+ }
else
- xsnprintf (octal, sizeof (octal), "\\x%lx", (long) value);
+ {
+ xsnprintf (octal, sizeof (octal), "\\x%lx", (long) value);
+ /* A hex escape might require the next character
+ to be escaped, because, unlike with octal,
+ hex escapes have no length limit. */
+ *need_escapep = true;
+ }
append_string_as_wide (octal, output);
}
/* If we somehow have extra bytes, print them now. */
char octal[5];
xsnprintf (octal, sizeof (octal), "\\%.3o", orig[i] & 0xff);
+ *need_escapep = false;
append_string_as_wide (octal, output);
++i;
}
-
- *need_escapep = true;
}
break;
}