>
>
> diff --git a/include/grub/charset.h b/include/grub/charset.h
> index 31a3b52dd..635d6df9e 100644
> --- a/include/grub/charset.h
> +++ b/include/grub/charset.h
> @@ -49,6 +49,13 @@
> #define GRUB_UTF16_LOWER_SURROGATE(code) \
> (0xDC00 | (((code) - GRUB_UCS2_LIMIT) & 0x3ff))
>
> +typedef enum grub_utf16_type
> + {
> + UTF16_CPU = 0,
> + UTF16_LE = 1,
> + UTF16_BE = 2,
> + } grub_utf16_type_t;
> +
>
As an alternative UTF16_CPU can be an alias to current UTF16_*E. Also this
needs GRUB_ prefix.
> /* Process one character from UTF8 sequence.
> At beginning set *code = 0, *count = 0. Returns 0 on failure and
> 1 on success. *count holds the number of trailing bytes. */
> @@ -198,13 +205,18 @@ grub_getend (const char *beg, const char *end)
> /* Convert UTF-16 to UTF-8. */
> static inline grub_uint8_t *
> grub_utf16_to_utf8 (grub_uint8_t *dest, const grub_uint16_t *src,
> - grub_size_t size)
> + grub_size_t size, grub_utf16_type_t type)
> {
> grub_uint32_t code_high = 0;
>
> while (size--)
> {
> - grub_uint32_t code = *src++;
> + grub_uint32_t code = grub_get_unaligned16 (src);
> + src++;
> + if (type == UTF16_LE)
> + code = grub_le_to_cpu16 (code);
> + else if (type == UTF16_BE)
> + code = grub_be_to_cpu16 (code);
>
> if (code_high)
> {
> --
> 2.34.1
>
>
> _______________________________________________
> Grub-devel mailing list
> [email protected]
> https://lists.gnu.org/mailman/listinfo/grub-devel
>
_______________________________________________
Grub-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/grub-devel