simplify normal/term.c and fix mismerge

This commit is contained in:
Vladimir 'phcoder' Serbinenko 2010-08-28 17:33:32 +02:00
parent 9b1cb542db
commit 4a842991db

View file

@ -206,19 +206,36 @@ void
grub_puts_terminal (const char *str, struct grub_term_output *term) grub_puts_terminal (const char *str, struct grub_term_output *term)
{ {
grub_uint32_t *unicode_str, *unicode_last_position; grub_uint32_t *unicode_str, *unicode_last_position;
grub_error_push ();
grub_utf8_to_ucs4_alloc (str, &unicode_str, grub_utf8_to_ucs4_alloc (str, &unicode_str,
&unicode_last_position); &unicode_last_position);
grub_error_pop ();
if (!unicode_str) if (!unicode_str)
{ {
for (; str; str++) for (; *str; str++)
{ {
grub_uint32_t code = *str; struct grub_unicode_glyph c =
if (code > 0x7f) {
code = '?'; .variant = 0,
.attributes = 0,
.ncomb = 0,
.combining = 0,
.estimated_width = 1,
.base = *str
};
putcode_real (term, code); FOR_ACTIVE_TERM_OUTPUTS(term)
if (code == '\n') {
putcode_real (term, '\r'); (term->putchar) (term, &c);
}
if (*str == '\n')
{
c.base = '\r';
FOR_ACTIVE_TERM_OUTPUTS(term)
{
(term->putchar) (term, &c);
}
}
} }
return; return;
} }
@ -760,28 +777,41 @@ grub_print_ucs4 (const grub_uint32_t * str,
void void
grub_xputs_normal (const char *str) grub_xputs_normal (const char *str)
{ {
grub_term_output_t term; grub_uint32_t *unicode_str = NULL, *unicode_last_position;
grub_uint32_t *unicode_str, *unicode_last_position;
int backlog = 0; int backlog = 0;
grub_term_output_t term;
grub_error_push ();
grub_utf8_to_ucs4_alloc (str, &unicode_str, grub_utf8_to_ucs4_alloc (str, &unicode_str,
&unicode_last_position); &unicode_last_position);
grub_error_pop ();
if (!unicode_str) if (!unicode_str)
{ {
grub_errno = GRUB_ERR_NONE;
for (; *str; str++) for (; *str; str++)
{ {
grub_term_output_t term; struct grub_unicode_glyph c =
grub_uint32_t code = *str; {
if (code > 0x7f) .variant = 0,
code = '?'; .attributes = 0,
.ncomb = 0,
.combining = 0,
.estimated_width = 1,
.base = *str
};
FOR_ACTIVE_TERM_OUTPUTS(term) FOR_ACTIVE_TERM_OUTPUTS(term)
{ {
putcode_real (term, code); (term->putchar) (term, &c);
if (code == '\n')
putcode_real (term, '\r');
} }
if (*str == '\n')
{
c.base = '\r';
FOR_ACTIVE_TERM_OUTPUTS(term)
{
(term->putchar) (term, &c);
}
}
} }
return; return;