mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 16:44:58 +02:00
tty/vt: Gather the code that outputs char with utf8 in mind
When we putting character to the tty, we take into account the keyboard mode to properly handle utf8. This code is duplicated few times. Signed-off-by: Alexey Gladkov <legion@kernel.org> Reviewed-by: Jiri Slaby <jirislaby@kernel.org> Link: https://lore.kernel.org/r/c0d10193e61f977b518862d8f216bbaf234138fd.1740141518.git.legion@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
366cf0c3af
commit
f92217683a
|
|
@ -376,6 +376,17 @@ static void to_utf8(struct vc_data *vc, uint c)
|
|||
}
|
||||
}
|
||||
|
||||
static void put_queue_utf8(struct vc_data *vc, u32 value)
|
||||
{
|
||||
if (kbd->kbdmode == VC_UNICODE)
|
||||
to_utf8(vc, value);
|
||||
else {
|
||||
int c = conv_uni_to_8bit(value);
|
||||
if (c != -1)
|
||||
put_queue(vc, c);
|
||||
}
|
||||
}
|
||||
|
||||
/* FIXME: review locking for vt.c callers */
|
||||
static void set_leds(void)
|
||||
{
|
||||
|
|
@ -454,13 +465,7 @@ static unsigned int handle_diacr(struct vc_data *vc, unsigned int ch)
|
|||
if (ch == ' ' || ch == (BRL_UC_ROW|0) || ch == d)
|
||||
return d;
|
||||
|
||||
if (kbd->kbdmode == VC_UNICODE)
|
||||
to_utf8(vc, d);
|
||||
else {
|
||||
int c = conv_uni_to_8bit(d);
|
||||
if (c != -1)
|
||||
put_queue(vc, c);
|
||||
}
|
||||
put_queue_utf8(vc, d);
|
||||
|
||||
return ch;
|
||||
}
|
||||
|
|
@ -471,13 +476,7 @@ static unsigned int handle_diacr(struct vc_data *vc, unsigned int ch)
|
|||
static void fn_enter(struct vc_data *vc)
|
||||
{
|
||||
if (diacr) {
|
||||
if (kbd->kbdmode == VC_UNICODE)
|
||||
to_utf8(vc, diacr);
|
||||
else {
|
||||
int c = conv_uni_to_8bit(diacr);
|
||||
if (c != -1)
|
||||
put_queue(vc, c);
|
||||
}
|
||||
put_queue_utf8(vc, diacr);
|
||||
diacr = 0;
|
||||
}
|
||||
|
||||
|
|
@ -685,13 +684,7 @@ static void k_unicode(struct vc_data *vc, unsigned int value, char up_flag)
|
|||
diacr = value;
|
||||
return;
|
||||
}
|
||||
if (kbd->kbdmode == VC_UNICODE)
|
||||
to_utf8(vc, value);
|
||||
else {
|
||||
int c = conv_uni_to_8bit(value);
|
||||
if (c != -1)
|
||||
put_queue(vc, c);
|
||||
}
|
||||
put_queue_utf8(vc, value);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user