]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
fix(i18n): shellcheck for modules.d/10i18n
authorHarald Hoyer <harald@redhat.com>
Fri, 26 Mar 2021 09:29:13 +0000 (10:29 +0100)
committerHarald Hoyer <harald@hoyer.xyz>
Mon, 29 Mar 2021 07:56:49 +0000 (09:56 +0200)
modules.d/10i18n/.shchkdir [new file with mode: 0644]
modules.d/10i18n/console_init.sh
modules.d/10i18n/module-setup.sh

diff --git a/modules.d/10i18n/.shchkdir b/modules.d/10i18n/.shchkdir
new file mode 100644 (file)
index 0000000..e69de29
index 2cbfb60c21bc5cdafc728d796e1bea8b60720a2f..3fe3b673d58c58463eca0c39e4a22d99bcf36d8c 100755 (executable)
@@ -2,8 +2,8 @@
 
 [ -n "$DRACUT_SYSTEMD" ] && exit 0
 
-if [ -x $systemdutildir/systemd-vconsole-setup ]; then
-    $systemdutildir/systemd-vconsole-setup "$@"
+if [ -x "$systemdutildir"/systemd-vconsole-setup ]; then
+    "$systemdutildir"/systemd-vconsole-setup "$@"
 fi
 
 [ -e /etc/vconsole.conf ] && . /etc/vconsole.conf
@@ -23,10 +23,10 @@ set_terminal() {
 
     if [ "${UNICODE}" = 1 ]; then
         printf '\033%%G' >&7
-        stty -F ${dev} iutf8
+        stty -F "${dev}" iutf8
     else
         printf '\033%%@' >&7
-        stty -F ${dev} -iutf8
+        stty -F "${dev}" -iutf8
     fi
 }
 
@@ -41,19 +41,15 @@ set_keymap() {
 
     [ "${UNICODE}" = 1 ] && utf_switch=-u
 
+    # shellcheck disable=SC2086
     loadkeys -q ${utf_switch} ${KEYMAP} ${EXT_KEYMAPS}
 }
 
 set_font() {
-    local dev=$1
-    local trans=''
-    local uni=''
-
-    [ -z "${FONT}" ] && FONT=${DEFAULT_FONT}
-    [ -n "${FONT_MAP}" ] && trans="-m ${FONT_MAP}"
-    [ -n "${FONT_UNIMAP}" ] && uni="-u ${FONT_UNIMAP}"
-
-    setfont ${FONT} -C ${dev} ${trans} ${uni}
+    setfont "${FONT-${DEFAULT_FONT}}" \
+        -C "${1}" \
+        ${FONT_MAP:+-m "${FONT_MAP}"} \
+        ${FONT_UNIMAP:+-u "${FONT_UNIMAP}"}
 }
 
 dev_close() {
@@ -64,19 +60,18 @@ dev_close() {
 dev_open() {
     local dev=$1
 
-    exec 6< ${dev} \
-        && exec 7>> ${dev}
+    exec 6< "${dev}" \
+        && exec 7>> "${dev}"
 }
 
 dev=/dev/${1#/dev/}
-devname=${dev#/dev/}
 
 [ -c "${dev}" ] || {
     echo "Usage: $0 device" >&2
     exit 1
 }
 
-dev_open ${dev}
+dev_open "${dev}"
 
 for fd in 6 7; do
     if ! [ -t ${fd} ]; then
@@ -87,8 +82,8 @@ for fd in 6 7; do
 done
 
 set_keyboard
-set_terminal ${dev}
-set_font ${dev}
+set_terminal "${dev}"
+set_font "${dev}"
 set_keymap
 
 dev_close
index 22ee54e7ec1805281ecc7338d646119f81518c94..c0768b506461d259a50b0a833022419af476aa95 100755 (executable)
@@ -16,9 +16,12 @@ depends() {
 
 # called by dracut
 install() {
+    declare -A KEYMAPS
+
     if dracut_module_included "systemd"; then
         unset FONT
         unset KEYMAP
+        # shellcheck disable=SC1090
         [[ -f "$dracutsysrootdir"/etc/vconsole.conf ]] && . "$dracutsysrootdir"/etc/vconsole.conf
     fi
 
@@ -27,26 +30,43 @@ install() {
     I18N_CONF="/etc/locale.conf"
     VCONFIG_CONF="/etc/vconsole.conf"
 
-    # This is from 10redhat-i18n.
     findkeymap() {
-        local MAPS=$1
-        local MAPNAME=${1%.map*}
-        local map
-        [[ ! -f $dracutsysrootdir$MAPS ]] \
-            && MAPS=$(find $dracutsysrootdir${kbddir}/keymaps -type f -name ${MAPNAME} -o -name ${MAPNAME}.map -o -name ${MAPNAME}.map.\*)
-
-        for map in $MAPS; do
-            KEYMAPS="$KEYMAPS $map "
-            case $map in
-                *.gz) cmd="zgrep" ;;
-                *.bz2) cmd="bzgrep" ;;
-                *) cmd="grep" ;;
+        # shellcheck disable=SC2064
+        trap "$(shopt -p nullglob globstar)" RETURN
+        shopt -q -s nullglob globstar
+
+        local -a MAPS
+        local MAPNAME
+        local INCLUDES
+        local MAP
+        local CMD
+        local FN
+
+        if [[ -f $dracutsysrootdir$1 ]]; then
+            MAPS=("$1")
+        else
+            MAPNAME=${1%.map*}
+            MAPS=("$dracutsysrootdir""${kbddir}"/keymaps/**/"${MAPNAME}"{,.map{,.*}})
+        fi
+
+        for MAP in "${MAPS[@]}"; do
+            [[ -f $MAP ]] || continue
+            [[ -v KEYMAPS["$MAP"] ]] && continue
+
+            KEYMAPS["$MAP"]=1
+
+            case "$MAP" in
+                *.gz) CMD="zgrep" ;;
+                *.bz2) CMD="bzgrep" ;;
+                *) CMD="grep" ;;
             esac
 
-            for INCL in $($cmd "^include " $map | while read _ a _ || [ -n "$a" ]; do echo ${a//\"/}; done); do
-                for FN in $(find $dracutsysrootdir${kbddir}/keymaps -type f -name $INCL\*); do
+            readarray -t INCLUDES < <("$CMD" '^include ' "$MAP" | while read -r _ a _ || [ -n "$a" ]; do echo "${a//\"/}"; done)
+
+            for INCL in "${INCLUDES[@]}"; do
+                for FN in "$dracutsysrootdir""${kbddir}"/keymaps/**/"$INCL"*; do
                     [[ -f $FN ]] || continue
-                    strstr "$KEYMAPS" " $FN " || findkeymap $FN
+                    [[ -v KEYMAPS["$FN"] ]] || findkeymap "$FN"
                 done
             done
         done
@@ -84,15 +104,16 @@ install() {
 
         # FIXME: double check
         # shellcheck disable=SC2068
-        for item in $@; do
-            item=(${item/:/ })
+        for item in "$@"; do
+            read -r -a item <<< "${item/:/ }"
             for map in ${item[1]//,/ }; do
-                map=(${map//-/ })
+                read -r -a map <<< "${map//-/ }"
                 if [[ -f "$dracutsysrootdir${item[0]}" ]]; then
                     value=$(grep "^${map[0]}=" "$dracutsysrootdir${item[0]}")
                     value=${value#*=}
                     echo "${map[1]:-${map[0]}}=${value}"
                 fi
+                unset map
             done
         done
     }
@@ -101,8 +122,8 @@ install() {
         inst_multiple setfont loadkeys kbd_mode stty
 
         if ! dracut_module_included "systemd"; then
-            inst ${moddir}/console_init.sh /lib/udev/console_init
-            inst_rules ${moddir}/10-console.rules
+            inst "${moddir}"/console_init.sh /lib/udev/console_init
+            inst_rules "${moddir}"/10-console.rules
             inst_hook cmdline 20 "${moddir}/parse-i18n.sh"
         fi
 
@@ -115,7 +136,7 @@ install() {
     }
 
     install_all_kbd() {
-        local rel f
+        local _src _line
 
         for _src in "${KBDSUBDIRS[@]}"; do
             inst_dir "${kbddir}/$_src"
@@ -126,12 +147,12 @@ install() {
         rm -f -- "${initdir}${kbddir}/consoletrans/utflist"
         find "${initdir}${kbddir}/" -name README\* -delete
         find "${initdir}${kbddir}/" -name '*.gz' -print -quit \
-            | while read line || [ -n "$line" ]; do
+            | while read -r _line || [ -n "$_line" ]; do
                 inst_multiple gzip
             done
 
         find "${initdir}${kbddir}/" -name '*.bz2' -print -quit \
-            | while read line || [ -n "$line" ]; do
+            | while read -r _line || [ -n "$_line" ]; do
                 inst_multiple bzip2
             done
     }
@@ -139,9 +160,12 @@ install() {
     install_local_i18n() {
         local map
 
-        eval $(gather_vars ${i18n_vars})
-        [ -f $dracutsysrootdir$I18N_CONF ] && . $dracutsysrootdir$I18N_CONF
-        [ -f $dracutsysrootdir$VCONFIG_CONF ] && . $dracutsysrootdir$VCONFIG_CONF
+        # shellcheck disable=SC2086
+        eval "$(gather_vars ${i18n_vars})"
+        # shellcheck disable=SC1090
+        [ -f "$dracutsysrootdir"$I18N_CONF ] && . "$dracutsysrootdir"$I18N_CONF
+        # shellcheck disable=SC1090
+        [ -f "$dracutsysrootdir"$VCONFIG_CONF ] && . "$dracutsysrootdir"$VCONFIG_CONF
 
         shopt -q -s nocasematch
         if [[ ${UNICODE} ]]; then
@@ -183,48 +207,48 @@ install() {
             return 1
         }
 
-        findkeymap ${KEYMAP}
+        findkeymap "${KEYMAP}"
 
         for map in ${EXT_KEYMAPS}; do
             ddebug "Adding extra map: ${map}"
-            findkeymap ${map}
+            findkeymap "${map}"
         done
 
-        for keymap in ${KEYMAPS}; do
-            inst_opt_decompress ${keymap}
+        for keymap in "${!KEYMAPS[@]}"; do
+            inst_opt_decompress "${keymap}"
         done
 
-        inst_opt_decompress ${kbddir}/consolefonts/${DEFAULT_FONT}.*
+        inst_opt_decompress "${kbddir}"/consolefonts/"${DEFAULT_FONT}".*
 
-        if [[ ${FONT} ]] && [[ ${FONT} != ${DEFAULT_FONT} ]]; then
+        if [[ ${FONT} ]] && [[ ${FONT} != "${DEFAULT_FONT}" ]]; then
             FONT=${FONT%.psf*}
-            inst_opt_decompress ${kbddir}/consolefonts/${FONT}.*
+            inst_opt_decompress "${kbddir}"/consolefonts/"${FONT}".*
         fi
 
         if [[ ${FONT_MAP} ]]; then
             FONT_MAP=${FONT_MAP%.trans}
             # There are three different formats that setfont supports
-            inst_simple ${kbddir}/consoletrans/${FONT_MAP} \
-                || inst_simple ${kbddir}/consoletrans/${FONT_MAP}.trans \
-                || inst_simple ${kbddir}/consoletrans/${FONT_MAP}_to_uni.trans \
+            inst_simple "${kbddir}"/consoletrans/"${FONT_MAP}" \
+                || inst_simple "${kbddir}"/consoletrans/"${FONT_MAP}".trans \
+                || inst_simple "${kbddir}"/consoletrans/"${FONT_MAP}"_to_uni.trans \
                 || dwarn "Could not find FONT_MAP ${FONT_MAP}!"
         fi
 
         if [[ ${FONT_UNIMAP} ]]; then
             FONT_UNIMAP=${FONT_UNIMAP%.uni}
-            inst_simple ${kbddir}/unimaps/${FONT_UNIMAP}.uni
+            inst_simple "${kbddir}"/unimaps/"${FONT_UNIMAP}".uni
         fi
 
         if dracut_module_included "systemd" && [[ -f $dracutsysrootdir${I18N_CONF} ]]; then
             inst_simple ${I18N_CONF}
         else
-            mksubdirs ${initdir}${I18N_CONF}
-            print_vars LC_ALL LANG >> ${initdir}${I18N_CONF}
+            mksubdirs "${initdir}"${I18N_CONF}
+            print_vars LC_ALL LANG >> "${initdir}"${I18N_CONF}
         fi
 
         if ! dracut_module_included "systemd"; then
-            mksubdirs ${initdir}${VCONFIG_CONF}
-            print_vars KEYMAP EXT_KEYMAPS UNICODE FONT FONT_MAP FONT_UNIMAP >> ${initdir}${VCONFIG_CONF}
+            mksubdirs "${initdir}"${VCONFIG_CONF}
+            print_vars KEYMAP EXT_KEYMAPS UNICODE FONT FONT_MAP FONT_UNIMAP >> "${initdir}"${VCONFIG_CONF}
         fi
 
         return 0