diff --git a/kbd.changes b/kbd.changes index 02f1232..afc563b 100644 --- a/kbd.changes +++ b/kbd.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Tue Oct 14 10:50:34 CEST 2008 - mmarek@suse.cz + +- fix case when multiple keymaps are found (bnc#259694) +- allow to specify a path such as 'i386/es.map.gz' in KEYTABLE + ------------------------------------------------------------------- Mon Sep 29 16:47:35 CEST 2008 - mmarek@suse.cz diff --git a/kbd.init b/kbd.init index 3ef4416..dab23fb 100644 --- a/kbd.init +++ b/kbd.init @@ -1,4 +1,4 @@ -#! /bin/sh +#! /bin/bash # Copyright (c) 1995-2005 SUSE LINUX Products AG, Nuernberg, Germany. # # Author: Burchard Steinbild @@ -59,9 +59,6 @@ test "$NON_SUSE_KERNEL" = "yes" && FGCONS=`/bin/fgconsole` KBDBASE="/usr/share/kbd" -KTABLE=${KEYTABLE%.map*} -KTABLE=${KTABLE##*/} - # # first search the wanted keytable. # @@ -135,17 +132,16 @@ case "${PREVLEVEL}${RUNLEVEL}" in ;; esac -KEYMAP="" +KEYMAP=() if test -e /$KEYTABLE ; then - KEYMAP=$KEYTABLE + KEYMAP=($KEYTABLE) else - KEYTABLE=$KTABLE case "$KEYTABLE" in - *.gz) KBDPATH="${KEYTABLE}" ;; - *.map) KBDPATH="${KEYTABLE} ${KEYTABLE}.gz" ;; - *) KBDPATH="${KEYTABLE} ${KEYTABLE}.gz ${KEYTABLE}.map.gz ${KEYTABLE}.map" ;; + *.gz) KBDPATH="*/${KEYTABLE}" ;; + *.map) KBDPATH="*/${KEYTABLE} */${KEYTABLE}.gz" ;; + *) KBDPATH="*/${KEYTABLE} */${KEYTABLE}.gz */${KEYTABLE}.map.gz */${KEYTABLE}.map" ;; esac - KEYMAP=$(find ${KBDBASE}/keymaps -type f \( -name ${KBDPATH// / -o -name } \)) + KEYMAP=($(find ${KBDBASE}/keymaps -type f \( -path ${KBDPATH// / -o -path } \) | sort)) fi # # setup kbdrate and led status @@ -327,29 +323,28 @@ case "$1" in if test -z "$KEYTABLE"; then echo "No keyboard map to load" else - if test -z "$KEYMAP" || test ! -d "$KBDBASE" ; then + if test "${#KEYMAP[@]}" = 0 -o ! -d "$KBDBASE" ; then if test -r /etc/defkeymap.map ; then - if test -n "$KEYMAP" ; then + if test "${#KEYMAP[@]}" -gt 0; then echo "$KEYMAP is unvailable, using /etc/defkeymap.map instead." if test -r /var/run/keymap ; then read cached < /etc/defkeymap.name - if test "$KEYMAP" != "$cached" && test $K != "$cached" ; then + if test "$KEYMAP" != "$cached"; then echo "Warning: fallback differs: $cached" fi fi else echo "Can not find a keymap for ${KEYTABLE}, trying fallback." fi - KEYMAP=/etc/defkeymap.map + KEYMAP=(/etc/defkeymap.map) else echo "Fallback /etc/defkeymap.map not there." echo "Can not find a keymap for ${KEYTABLE}, Exit." rc_failed fi else - if test ! -e "$KEYMAP" ; then + if test "${#KEYMAP[@]}" -gt 1 ; then echo "Found more than one keymap ${KEYTABLE}" - KEYMAP=$K echo "Using $KEYMAP." echo "If you want another one, please add complete path to" echo "KEYTABLE in /etc/sysconfig/keyboard." @@ -470,8 +465,7 @@ case "$1" in # FIXME: this should be done much earlier # to avoid bugzilla# 259694 or similar. mv /dev/shm/defkeymap.map /etc/defkeymap.map - if test ! -z "$KEYMAP" && test "$KEYMAP" != "/etc/defkeymap.map" ; then - test ! -e "$KEYMAP" && KEYMAP=$K + if test "${#KEYMAP[@]}" -gt 0 -a "$KEYMAP" != "/etc/defkeymap.map" ; then echo $KEYMAP > /etc/defkeymap.name fi fi diff --git a/kbd.spec b/kbd.spec index f812917..8ef6a2d 100644 --- a/kbd.spec +++ b/kbd.spec @@ -24,7 +24,7 @@ License: GPL v2 or later Group: System/Console AutoReqProv: on Version: 1.14.1 -Release: 13 +Release: 14 Summary: Keyboard and Font Utilities Source: kbd-%{version}.tar.bz2 Source1: kbd_fonts.tar.bz2 @@ -302,6 +302,9 @@ install -m 644 %SOURCE12 $RPM_BUILD_ROOT/%{_mandir}/man8/ rm -rf $RPM_BUILD_ROOT %changelog +* Tue Oct 14 2008 mmarek@suse.cz +- fix case when multiple keymaps are found (bnc#259694) +- allow to specify a path such as 'i386/es.map.gz' in KEYTABLE * Mon Sep 29 2008 mmarek@suse.cz - fixed lat2a-16.psfu (bnc#340579) * Tue Sep 09 2008 mmarek@suse.cz