=================================================================== RCS file: /cvs/openbsd/fw_update/fw_install.sh,v retrieving revision 1.122 retrieving revision 1.125 diff -u -r1.122 -r1.125 --- openbsd/fw_update/fw_install.sh 2021/12/24 02:36:13 1.122 +++ openbsd/fw_update/fw_install.sh 2021/12/25 00:27:56 1.125 @@ -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.125 2021/12/25 00:27:56 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" )" @@ -285,16 +303,12 @@ LOCALSRC="${LOCALSRC:-.}" fi -[ "$LOCALSRC" ] || LOCALSRC="$( tmpdir "${DESTDIR}/tmp/${0##*/}" )" - -CFILE="$LOCALSRC/$CFILE" - if [ -x /usr/bin/id ] && [ "$(/usr/bin/id -u)" != 0 ]; then echo "need root privileges" >&2 exit 1 fi -set -A devices -- "$@" +set -sA devices -- "$@" if "$DELETE"; then [ "$OPT_D" ] && usage 22 @@ -336,11 +350,17 @@ exit fi +if [ ! "$LOCALSRC" ]; then + LOCALSRC="$( tmpdir "${DESTDIR}/tmp/${0##*/}" )" +fi + +CFILE="$LOCALSRC/$CFILE" + if [ "${devices[*]:-}" ]; then "$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