* grub-core/normal/charset.c (grub_ucs4_to_utf8): Return number of
written bytes. (grub_get_num_of_utf8_bytes): New function. (grub_ucs4_to_utf8_alloc): Use grub_get_num_of_utf8_bytes. * grub-core/normal/menu_entry.c (run): Convert entry to UTF-8 before executing it. * include/grub/charset.h (grub_get_num_of_utf8_bytes): New proto. (grub_ucs4_to_utf8): Change return type.
This commit is contained in:
parent
491c57a815
commit
851ffadac2
4 changed files with 44 additions and 13 deletions
|
@ -1205,21 +1205,22 @@ run (struct screen *screen)
|
|||
char * editor_getsource (void)
|
||||
{
|
||||
int i;
|
||||
int size = 0;
|
||||
grub_size_t size = 0, tot_size = 0;
|
||||
char *source;
|
||||
|
||||
for (i = 0; i < screen->num_lines; i++)
|
||||
size += screen->lines[i].len + 1;
|
||||
tot_size += grub_get_num_of_utf8_bytes (screen->lines[i].buf,
|
||||
screen->lines[i].len) + 1;
|
||||
|
||||
source = grub_malloc (size + 1);
|
||||
source = grub_malloc (tot_size + 1);
|
||||
if (! source)
|
||||
return NULL;
|
||||
|
||||
size = 0;
|
||||
for (i = 0; i < screen->num_lines; i++)
|
||||
{
|
||||
grub_memcpy (source + size, screen->lines[i].buf, screen->lines[i].len);
|
||||
size += screen->lines[i].len;
|
||||
size += grub_ucs4_to_utf8 (screen->lines[i].buf, screen->lines[i].len,
|
||||
(grub_uint8_t *) source + size,
|
||||
tot_size - size);
|
||||
source[size++] = '\n';
|
||||
}
|
||||
source[size] = '\0';
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue