On Tue, Sep 17, 2013 at 3:09 AM, John Spencer <maillist-busy...@barfooze.de> wrote: > using this debug patch > > --- a/console-tools/loadkmap.c > +++ b/console-tools/loadkmap.c > @@ -67,7 +67,10 @@ int loadkmap_main(int argc UNUSED_PARAM, char **argv) > ke.kb_index = j; > ke.kb_table = i; > ke.kb_value = ibuff[j]; > - ioctl(fd, KDSKBENT, &ke); > + if(ioctl(fd, KDSKBENT, &ke)) > + dprintf(2, "warning: failed to set > key slot %zu,%zu to %d, reason: %s\n", > + i, j, ke.kb_value, strerror(errno)); > + > } > } > } > > > one can see that loadkmap does not handle the value K_ALLOCATED == 638 > correctly. when we dump and load the kmap multiple times, the number of > errors increase. > > if we begin with > loadkeys /share/keymaps/i386/qwertz/de_CH-latin1.map.gz (loadkeys from > kbd-1.15.3) > dumpkmap > test.kmap > loadkmap < test.kmap > warning: failed to set key slot 6,0 to 638, reason: Invalid argument > dumpkmap > test.kmap > loadkmap < test.kmap > warning: failed to set key slot 6,0 to 638, reason: Invalid argument > warning: failed to set key slot 9,0 to 638, reason: Invalid argument > warning: failed to set key slot 10,0 to 638, reason: Invalid argument > > unfortunately both kernel source code and kbd source is undocumented when > they deal with K_ALLOCATED and K_NOSUCHMAP, so i am uncertain on how to fix > it.
Maybe just a comment will do? /* * Note: table[idx:0] can contain special value * K_ALLOCATED (marks allocated tables in kernel). * dumpkmap saves the value as-is; but attempts * to load it here fail, since it isn't a valid * key value: it is K(KT_SPEC,126) == 2<<8 + 126, * whereas last valid KT_SPEC is * K_BARENUMLOCK == K(KT_SPEC,19). * So far we just ignore these errors: */ ioctl(fd, KDSKBENT, &ke); _______________________________________________ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox