From: Tom Tromey Date: Thu, 30 Sep 2021 18:53:55 +0000 (-0600) Subject: Fix Rust lex selftest when using libiconv X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=775d36a916c1be042ceb67fc6ea22f53a9f5e331;p=binutils-gdb.git 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. --- 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"));