merge mainline into intwrap

This commit is contained in:
Vladimir 'phcoder' Serbinenko 2010-08-29 23:21:21 +02:00
commit 069c9c5fda
137 changed files with 8057 additions and 3591 deletions

View file

@ -297,13 +297,10 @@ grub_utf8_to_ucs4_alloc (const char *msg, grub_uint32_t **unicode_msg,
{
grub_size_t msg_len = grub_strlen (msg);
*unicode_msg = grub_malloc (grub_strlen (msg) * sizeof (grub_uint32_t));
*unicode_msg = grub_malloc (msg_len * sizeof (grub_uint32_t));
if (!*unicode_msg)
{
grub_printf ("utf8_to_ucs4 ERROR1: %s", msg);
return -1;
}
return -1;
msg_len = grub_utf8_to_ucs4 (*unicode_msg, msg_len,
(grub_uint8_t *) msg, -1, 0);
@ -1215,6 +1212,8 @@ grub_bidi_logical_to_visual (const grub_uint32_t *logical,
struct grub_unicode_glyph *visual_ptr;
*visual_out = visual_ptr = grub_malloc (2 * sizeof (visual_ptr[0])
* logical_len);
if (!visual_ptr)
return -1;
for (ptr = logical; ptr <= logical + logical_len; ptr++)
{
if (ptr == logical + logical_len || *ptr == '\n')

View file

@ -585,6 +585,7 @@ grub_cmdline_get (const char *prompt)
break;
case '\e':
grub_free (cl_terms);
return 0;
case '\b':
@ -635,5 +636,6 @@ grub_cmdline_get (const char *prompt)
ret = grub_ucs4_to_utf8_alloc (buf + lpos, llen - lpos + 1);
grub_free (buf);
grub_free (cl_terms);
return ret;
}

View file

@ -499,7 +499,10 @@ grub_normal_do_completion (char *buf, int *restore,
fail:
if (argc != 0)
grub_free (argv[0]);
{
grub_free (argv);
grub_free (argv[0]);
}
grub_free (match);
grub_errno = GRUB_ERR_NONE;

View file

@ -44,6 +44,9 @@ static int grub_more;
static int grub_normal_char_counter = 0;
static void
putcode_real (grub_uint32_t code, struct grub_term_output *term);
int
grub_normal_get_char_counter (void)
{
@ -94,6 +97,7 @@ print_more (void)
FOR_ACTIVE_TERM_OUTPUTS(term)
grub_print_spaces (term, 8);
grub_term_restore_pos (pos);
grub_free (pos);
/* Scroll one lines or an entire page, depending on the key. */
@ -202,8 +206,39 @@ void
grub_puts_terminal (const char *str, struct grub_term_output *term)
{
grub_uint32_t *unicode_str, *unicode_last_position;
grub_error_push ();
grub_utf8_to_ucs4_alloc (str, &unicode_str,
&unicode_last_position);
grub_error_pop ();
if (!unicode_str)
{
for (; *str; str++)
{
struct grub_unicode_glyph c =
{
.variant = 0,
.attributes = 0,
.ncomb = 0,
.combining = 0,
.estimated_width = 1,
.base = *str
};
FOR_ACTIVE_TERM_OUTPUTS(term)
{
(term->putchar) (term, &c);
}
if (*str == '\n')
{
c.base = '\r';
FOR_ACTIVE_TERM_OUTPUTS(term)
{
(term->putchar) (term, &c);
}
}
}
return;
}
grub_print_ucs4 (unicode_str, unicode_last_position, 0, 0, term);
grub_free (unicode_str);
@ -742,15 +777,43 @@ grub_print_ucs4 (const grub_uint32_t * str,
void
grub_xputs_normal (const char *str)
{
grub_term_output_t term;
grub_uint32_t *unicode_str, *unicode_last_position;
grub_uint32_t *unicode_str = NULL, *unicode_last_position;
int backlog = 0;
grub_term_output_t term;
grub_error_push ();
grub_utf8_to_ucs4_alloc (str, &unicode_str,
&unicode_last_position);
&unicode_last_position);
grub_error_pop ();
if (!unicode_str)
{
grub_errno = GRUB_ERR_NONE;
for (; *str; str++)
{
struct grub_unicode_glyph c =
{
.variant = 0,
.attributes = 0,
.ncomb = 0,
.combining = 0,
.estimated_width = 1,
.base = *str
};
FOR_ACTIVE_TERM_OUTPUTS(term)
{
(term->putchar) (term, &c);
}
if (*str == '\n')
{
c.base = '\r';
FOR_ACTIVE_TERM_OUTPUTS(term)
{
(term->putchar) (term, &c);
}
}
}
return;
}