1*c2e0c6b5SAndroid Build Coastguard Worker#!/bin/sh 2*c2e0c6b5SAndroid Build Coastguard Worker 3*c2e0c6b5SAndroid Build Coastguard Workerset -e 4*c2e0c6b5SAndroid Build Coastguard Worker 5*c2e0c6b5SAndroid Build Coastguard WorkerSRC="https://pci-ids.ucw.cz/v2.2/pci.ids" 6*c2e0c6b5SAndroid Build Coastguard WorkerDEST=pci.ids 7*c2e0c6b5SAndroid Build Coastguard WorkerPCI_COMPRESSED_IDS= 8*c2e0c6b5SAndroid Build Coastguard WorkerGREP=grep 9*c2e0c6b5SAndroid Build Coastguard WorkerVERSION=unknown 10*c2e0c6b5SAndroid Build Coastguard WorkerUSER_AGENT=update-pciids/$VERSION 11*c2e0c6b5SAndroid Build Coastguard WorkerQUIET= 12*c2e0c6b5SAndroid Build Coastguard Worker 13*c2e0c6b5SAndroid Build Coastguard Worker[ "$1" = "-q" ] && quiet=true || quiet=false 14*c2e0c6b5SAndroid Build Coastguard Worker 15*c2e0c6b5SAndroid Build Coastguard Worker# if pci.ids is read-only (because the filesystem is read-only), 16*c2e0c6b5SAndroid Build Coastguard Worker# then just skip this whole process. 17*c2e0c6b5SAndroid Build Coastguard Workerif ! touch ${DEST} >/dev/null 2>&1 ; then 18*c2e0c6b5SAndroid Build Coastguard Worker ${quiet} || echo "${DEST} is read-only, exiting." 1>&2 19*c2e0c6b5SAndroid Build Coastguard Worker exit 1 20*c2e0c6b5SAndroid Build Coastguard Workerfi 21*c2e0c6b5SAndroid Build Coastguard Worker 22*c2e0c6b5SAndroid Build Coastguard Workerif command -v xz >/dev/null 2>&1 ; then 23*c2e0c6b5SAndroid Build Coastguard Worker DECOMP="xz -d" 24*c2e0c6b5SAndroid Build Coastguard Worker SRC="$SRC.xz" 25*c2e0c6b5SAndroid Build Coastguard Workerelif command -v bzip2 >/dev/null 2>&1 ; then 26*c2e0c6b5SAndroid Build Coastguard Worker DECOMP="bzip2 -d" 27*c2e0c6b5SAndroid Build Coastguard Worker SRC="$SRC.bz2" 28*c2e0c6b5SAndroid Build Coastguard Workerelif command -v gzip >/dev/null 2>&1 ; then 29*c2e0c6b5SAndroid Build Coastguard Worker DECOMP="gzip -d" 30*c2e0c6b5SAndroid Build Coastguard Worker SRC="$SRC.gz" 31*c2e0c6b5SAndroid Build Coastguard Workerelse 32*c2e0c6b5SAndroid Build Coastguard Worker DECOMP="cat" 33*c2e0c6b5SAndroid Build Coastguard Workerfi 34*c2e0c6b5SAndroid Build Coastguard Worker 35*c2e0c6b5SAndroid Build Coastguard Workerif command -v curl >/dev/null 2>&1 ; then 36*c2e0c6b5SAndroid Build Coastguard Worker ${quiet} && QUIET="-s -S" 37*c2e0c6b5SAndroid Build Coastguard Worker dl () 38*c2e0c6b5SAndroid Build Coastguard Worker { 39*c2e0c6b5SAndroid Build Coastguard Worker curl -o $DEST.new --user-agent "$USER_AGENT curl" $QUIET $SRC 40*c2e0c6b5SAndroid Build Coastguard Worker } 41*c2e0c6b5SAndroid Build Coastguard Workerelif command -v wget >/dev/null 2>&1 ; then 42*c2e0c6b5SAndroid Build Coastguard Worker ${quiet} && QUIET="-q" 43*c2e0c6b5SAndroid Build Coastguard Worker dl () 44*c2e0c6b5SAndroid Build Coastguard Worker { 45*c2e0c6b5SAndroid Build Coastguard Worker wget --no-timestamping -O $DEST.new --user-agent "$USER_AGENT wget" $QUIET $SRC 46*c2e0c6b5SAndroid Build Coastguard Worker } 47*c2e0c6b5SAndroid Build Coastguard Workerelif command -v lynx >/dev/null 2>&1 ; then 48*c2e0c6b5SAndroid Build Coastguard Worker dl () 49*c2e0c6b5SAndroid Build Coastguard Worker { 50*c2e0c6b5SAndroid Build Coastguard Worker lynx -source -useragent="$USER_AGENT lynx" $SRC >$DEST.new 51*c2e0c6b5SAndroid Build Coastguard Worker } 52*c2e0c6b5SAndroid Build Coastguard Workerelse 53*c2e0c6b5SAndroid Build Coastguard Worker echo >&2 "update-pciids: cannot find curl, wget or lynx" 54*c2e0c6b5SAndroid Build Coastguard Worker exit 1 55*c2e0c6b5SAndroid Build Coastguard Workerfi 56*c2e0c6b5SAndroid Build Coastguard Worker 57*c2e0c6b5SAndroid Build Coastguard Workerif ! dl ; then 58*c2e0c6b5SAndroid Build Coastguard Worker echo >&2 "update-pciids: download failed" 59*c2e0c6b5SAndroid Build Coastguard Worker rm -f $DEST.new 60*c2e0c6b5SAndroid Build Coastguard Worker exit 1 61*c2e0c6b5SAndroid Build Coastguard Workerfi 62*c2e0c6b5SAndroid Build Coastguard Worker 63*c2e0c6b5SAndroid Build Coastguard Workerif ! $DECOMP <$DEST.new >$DEST.new.plain ; then 64*c2e0c6b5SAndroid Build Coastguard Worker echo >&2 "update-pciids: decompression failed, probably truncated file" 65*c2e0c6b5SAndroid Build Coastguard Worker exit 1 66*c2e0c6b5SAndroid Build Coastguard Workerfi 67*c2e0c6b5SAndroid Build Coastguard Worker 68*c2e0c6b5SAndroid Build Coastguard Workerif ! $GREP >/dev/null "^C " $DEST.new.plain ; then 69*c2e0c6b5SAndroid Build Coastguard Worker echo >&2 "update-pciids: missing class info, probably truncated file" 70*c2e0c6b5SAndroid Build Coastguard Worker exit 1 71*c2e0c6b5SAndroid Build Coastguard Workerfi 72*c2e0c6b5SAndroid Build Coastguard Worker 73*c2e0c6b5SAndroid Build Coastguard Workerif [ -f $DEST ] ; then 74*c2e0c6b5SAndroid Build Coastguard Worker ln -f $DEST $DEST.old 75*c2e0c6b5SAndroid Build Coastguard Worker # --reference is supported only by chmod from GNU file, so let's ignore any errors 76*c2e0c6b5SAndroid Build Coastguard Worker chmod -f --reference=$DEST.old $DEST.new $DEST.new.plain 2>/dev/null || true 77*c2e0c6b5SAndroid Build Coastguard Workerfi 78*c2e0c6b5SAndroid Build Coastguard Worker 79*c2e0c6b5SAndroid Build Coastguard Workerif [ "$PCI_COMPRESSED_IDS" = 1 ] ; then 80*c2e0c6b5SAndroid Build Coastguard Worker if [ "${SRC%.gz}" != .gz ] ; then 81*c2e0c6b5SAndroid Build Coastguard Worker # Recompress to gzip 82*c2e0c6b5SAndroid Build Coastguard Worker gzip <$DEST.new.plain >$DEST.new 83*c2e0c6b5SAndroid Build Coastguard Worker fi 84*c2e0c6b5SAndroid Build Coastguard Worker mv $DEST.new $DEST 85*c2e0c6b5SAndroid Build Coastguard Worker rm -f $DEST.new.plain 86*c2e0c6b5SAndroid Build Coastguard Workerelse 87*c2e0c6b5SAndroid Build Coastguard Worker mv $DEST.new.plain $DEST 88*c2e0c6b5SAndroid Build Coastguard Worker rm -f $DEST.new 89*c2e0c6b5SAndroid Build Coastguard Workerfi 90*c2e0c6b5SAndroid Build Coastguard Worker 91*c2e0c6b5SAndroid Build Coastguard Worker# Older versions did not compress the ids file, so let's make sure we 92*c2e0c6b5SAndroid Build Coastguard Worker# clean that up. 93*c2e0c6b5SAndroid Build Coastguard Workerif [ ${DEST%.gz} != ${DEST} ] ; then 94*c2e0c6b5SAndroid Build Coastguard Worker rm -f ${DEST%.gz} ${DEST%.gz}.old 95*c2e0c6b5SAndroid Build Coastguard Workerfi 96*c2e0c6b5SAndroid Build Coastguard Worker 97*c2e0c6b5SAndroid Build Coastguard Worker${quiet} || echo "Done." 98