>
>
> 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
> Grub-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/grub-devel
>
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to