=================================================================== RCS file: /cvs/openbsd/fw_update/fw_install.sh,v retrieving revision 1.122 retrieving revision 1.124 diff -u -r1.122 -r1.124 --- openbsd/fw_update/fw_install.sh 2021/12/24 02:36:13 1.122 +++ openbsd/fw_update/fw_install.sh 2021/12/24 18:19:00 1.124 @@ -1,5 +1,5 @@ #!/bin/ksh -# $OpenBSD: fw_install.sh,v 1.122 2021/12/24 02:36:13 afresh1 Exp $ +# $OpenBSD: fw_install.sh,v 1.124 2021/12/24 18:19:00 afresh1 Exp $ # # Copyright (c) 2021 Andrew Hewus Fresh # @@ -117,7 +117,7 @@ fi } -devices_needing_firmware() { +firmware_in_dmesg() { local _d _m _line _dmesgtail _last='' _nl=$( echo ) # When we're not in the installer, the dmesg.boot can @@ -153,7 +153,7 @@ installed_firmware() { local _pre="$1" _match="$2" _post="$3" _firmware - set -A _firmware -- $( + set -sA _firmware -- $( set +o noglob grep -Fxl '@option firmware' \ "${DESTDIR}/var/db/pkg/"$_pre"$_match"$_post"/+CONTENTS" \ @@ -168,6 +168,24 @@ done } +detect_firmware() { + local _devices _last='' _d + + set -sA _devices -- $( + firmware_in_dmesg + for _d in $( installed_firmware '*' '-firmware-' '*' ); do + echo "$( firmware_devicename "$_d" )" + done + ) + + [ "${_devices[*]:-}" ] || return 0 + for _d in "${_devices[@]}"; do + [[ $_last = $_d ]] && continue + echo $_d + _last="$_d" + done +} + add_firmware () { local _f="${1##*/}" _pkgname local _tmpdir="$( tmpdir "${DESTDIR}/var/db/pkg/.firmware" )" @@ -294,7 +312,7 @@ exit 1 fi -set -A devices -- "$@" +set -sA devices -- "$@" if "$DELETE"; then [ "$OPT_D" ] && usage 22 @@ -340,7 +358,7 @@ "$ALL" && usage 22 else "$VERBOSE" && echo -n "Detecting firmware ..." - set -A devices -- $( devices_needing_firmware ) + set -sA devices -- $( detect_firmware ) "$VERBOSE" && { [ "${devices[*]:-}" ] && echo " found." || echo " done." ; } fi