From: Samuel Thibault Turn the kernel accent_table into unicode, and extend ioctls KDGKBDIACR and KDSKBDIACR into their equivalents KDGKBDIACRUC and KDSKBDIACR. New function int conv_uni_to_8bit(u32 uni) for converting unicode into 8bit _input_. No, we don't want to store the translation, as it is potentially sparse and large. Signed-off-by: Samuel Thibault Cc: Jan Engelhardt Cc: "Antonino A. Daplas" Cc: David Woodhouse Cc: Adrian Bunk Cc: Martin Schwidefsky Cc: Heiko Carstens Signed-off-by: Andrew Morton --- drivers/s390/char/keyboard.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-) diff -puN drivers/s390/char/keyboard.c~unicode-diacritics-support-s390-fix drivers/s390/char/keyboard.c --- a/drivers/s390/char/keyboard.c~unicode-diacritics-support-s390-fix +++ a/drivers/s390/char/keyboard.c @@ -489,9 +489,9 @@ kbd_ioctl(struct kbd_data *kbd, struct f if (put_user(kbd->accent_table_size, &a->kb_cnt)) return -EFAULT; for (i = 0; i < kbd->accent_table_size; i++) { - diacr.diacr = conv_uni_to_8bit(kbd->accent_table[i].diacr); - diacr.base = conv_uni_to_8bit(kbd->accent_table[i].base); - diacr.result = conv_uni_to_8bit(kbd->accent_table[i].result); + diacr.diacr = kbd->accent_table[i].diacr; + diacr.base = kbd->accent_table[i].base; + diacr.result = kbd->accent_table[i].result; if (copy_to_user(a->kbdiacr + i, &diacr, sizeof(struct kbdiacr))) return -EFAULT; } @@ -525,9 +525,9 @@ kbd_ioctl(struct kbd_data *kbd, struct f for (i = 0; i < ct; i++) { if (copy_from_user(&diacr, a->kbdiacr + i, sizeof(struct kbdiacr))) return -EFAULT; - kbd->accent_table[i].diacr = conv_8bit_to_uni(diacr.diacr); - kbd->accent_table[i].base = conv_8bit_to_uni(diacr.base); - kbd->accent_table[i].result = conv_8bit_to_uni(diacr.result); + kbd->accent_table[i].diacr = diacr.diacr; + kbd->accent_table[i].base = diacr.base; + kbd->accent_table[i].result = diacr.result; } return 0; } _