]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
vconsole: don't do GIO_SCRNMAP / GIO_UNISCRNMAP
authorMichal Soltys <soltys@ziu.info>
Tue, 26 Jul 2016 22:57:01 +0000 (00:57 +0200)
committerMichal Soltys <soltys@ziu.info>
Tue, 26 Jul 2016 22:57:01 +0000 (00:57 +0200)
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

src/vconsole/vconsole-setup.c

index 1118118450e29ac1951789cac723f05b2ee56547..abf3871fd8e24b8ac65a9f42479ac7022f3264a5 100644 (file)
@@ -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 } */