=================================================================== RCS file: /cvs/openbsd/fw_update/fw_install.sh,v retrieving revision 1.121 retrieving revision 1.124 diff -u -r1.121 -r1.124 --- openbsd/fw_update/fw_install.sh 2021/12/24 02:27:46 1.121 +++ 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.121 2021/12/24 02:27:46 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" )" @@ -241,20 +259,18 @@ } usage() { - echo "usage: ${0##*/} [-d | -D | -L] [-av] [-p path] [driver | file ...]" + echo "usage: ${0##*/} [-d | -D] [-av] [-p path] [driver | file ...]" exit 2 } ALL=false OPT_D= -OPT_L= -while getopts :adDLp:v name +while getopts :adDp:v name do case "$name" in a) ALL=true ;; d) DELETE=true ;; D) OPT_D=true ;; - L) OPT_L=true ;; p) LOCALSRC="$OPTARG" ;; v) VERBOSE=true ;; :) @@ -269,36 +285,26 @@ done shift $((OPTIND - 1)) -[ "$OPT_D" ] && [ "$OPT_L" ] && usage 1 - if [ "$LOCALSRC" ]; then if [[ $LOCALSRC = @(ftp|http?(s))://* ]]; then FWURL="${LOCALSRC}" LOCALSRC= else - # If we've not specifically asked to download to this path - # then we are installing from the local dir and no downloading. - [ "$OPT_D" ] || DOWNLOAD=false LOCALSRC="${LOCALSRC:#file:}" - ! [ -d "$LOCALSRC" ] && echo "The path must be a URL or an existing directory" >&2 && exit 2 fi fi +# "Download only" means local dir and don't install if [ "$OPT_D" ]; then - # "Download only" means local dir and don't install INSTALL=false LOCALSRC="${LOCALSRC:-.}" -elif [ "$OPT_L" ]; then - # "Local" means don't download, install from local dir - DOWNLOAD=false - LOCALSRC="${LOCALSRC:-.}" -elif [ ! "$LOCALSRC" ]; then - LOCALSRC="$( tmpdir "${DESTDIR}/tmp/${0##*/}" )" fi +[ "$LOCALSRC" ] || LOCALSRC="$( tmpdir "${DESTDIR}/tmp/${0##*/}" )" + CFILE="$LOCALSRC/$CFILE" if [ -x /usr/bin/id ] && [ "$(/usr/bin/id -u)" != 0 ]; then @@ -306,10 +312,10 @@ exit 1 fi -set -A devices -- "$@" +set -sA devices -- "$@" if "$DELETE"; then - [ "$OPT_D" ] || [ "$OPT_L" ] && usage 22 + [ "$OPT_D" ] && usage 22 set -A installed if [ "${devices[*]:-}" ]; then @@ -352,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