mirror of
https://github.com/systemd/systemd.git
synced 2024-12-26 03:22:00 +03:00
vconsole: don't do GIO_SCRNMAP / GIO_UNISCRNMAP
GIO_SCRNMAP / GIO_UNISCRNMAP are related to what setfont does with -m option - namely setting intermediate map from 8bit values into unicode values. This map is global, so single setfont invocation sets it for all applicable consoles. Furthermore calling GIO_SCRNMAP before GIO_UNISCRNMAP causes issues as the former corrupts values > 255 (UNI alone would be sufficient). The bug can be easily tested with the following conf: KEYMAP=pl FONT=LatArCyrHeb-16 FONT_MAP=8859-2
This commit is contained in:
parent
31d28eabc1
commit
c2f2c51c53
@ -192,8 +192,6 @@ static int font_load_and_wait(const char *vc, const char *font, const char *map,
|
||||
*/
|
||||
static void font_copy_to_all_vcs(int fd) {
|
||||
struct vt_stat vcs = {};
|
||||
unsigned char map8[E_TABSZ];
|
||||
unsigned short map16[E_TABSZ];
|
||||
struct unimapdesc unimapd;
|
||||
_cleanup_free_ struct unipair* unipairs = NULL;
|
||||
int i, r;
|
||||
@ -234,14 +232,6 @@ static void font_copy_to_all_vcs(int fd) {
|
||||
cfo.height = vcs.v_active-1; /* tty1 == index 0 */
|
||||
(void) ioctl(vcfd, KDFONTOP, &cfo);
|
||||
|
||||
/* copy map of 8bit chars */
|
||||
if (ioctl(fd, GIO_SCRNMAP, map8) >= 0)
|
||||
(void) ioctl(vcfd, PIO_SCRNMAP, map8);
|
||||
|
||||
/* copy map of 8bit chars -> 16bit Unicode values */
|
||||
if (ioctl(fd, GIO_UNISCRNMAP, map16) >= 0)
|
||||
(void) ioctl(vcfd, PIO_UNISCRNMAP, map16);
|
||||
|
||||
/* copy unicode translation table */
|
||||
/* unimapd is a ushort count and a pointer to an
|
||||
array of struct unipair { ushort, ushort } */
|
||||
|
Loading…
Reference in New Issue
Block a user