From 775d36a916c1be042ceb67fc6ea22f53a9f5e331 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 30 Sep 2021 12:53:55 -0600 Subject: [PATCH] Fix Rust lex selftest when using libiconv The Rust lex selftest fails on our Windows build. I tracked this down to a use of UTF-32 as a parameter to convert_between_encodings. Here, iconv_open succeeds, but the actual conversion of a tab character fails with EILSEQ. I suspect that "UTF-32" is being interpreted as big-endian, as changing the call to use "UTF-32LE" makes it work. This patch implements this fix. --- gdb/rust-parse.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/gdb/rust-parse.c b/gdb/rust-parse.c index 539e1c8256d..e12bf29a71d 100644 --- a/gdb/rust-parse.c +++ b/gdb/rust-parse.c @@ -695,9 +695,16 @@ rust_parser::lex_string () if (is_byte) obstack_1grow (&obstack, value); else - convert_between_encodings ("UTF-32", "UTF-8", (gdb_byte *) &value, - sizeof (value), sizeof (value), - &obstack, translit_none); + { +#if WORDS_BIGENDIAN +#define UTF32 "UTF-32BE" +#else +#define UTF32 "UTF-32LE" +#endif + convert_between_encodings (UTF32, "UTF-8", (gdb_byte *) &value, + sizeof (value), sizeof (value), + &obstack, translit_none); + } } else if (pstate->lexptr[0] == '\0') error (_("Unexpected EOF in string")); -- 2.30.2