#!/bin/sh # update-pciids.sh is licensed under the GNU General Public License # (GPL) version 2 or above. # # Copyright (C) 2008-2010 Anibal Monsalve Salazar # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # Please read the "COPYING" file in the archive root, or visit # http://www.gnu.org/licenses/gpl.html, for information about the GPL. # # This scipt is a rewrite of a script with the same name by # Martin Mares. set -e #URL="http://pci-ids.ucw.cz/pci.ids" URL="http://pciids.sourceforge.net/v2.2/pci.ids" FILE=/usr/share/misc/pci.ids RM="/bin/rm" MV="/bin/mv" SED="/bin/sed" GREP="/bin/grep" ECHO="/bin/echo" CHMOD="/bin/chmod" CHOWN="/bin/chown" GUNZIP="/bin/gunzip" BUNZIP2="/bin/bunzip2" TOUCH="/usr/bin/touch" WGET="/usr/bin/wget" CURL="/usr/bin/curl" LYNX="/usr/bin/lynx" NEWFILE="$FILE.new" OLDFILE="$FILE.old" if [ "$1" = "-q" ] then quiet="yes" else quiet="no" fi if ! $TOUCH $NEWFILE > /dev/null 2>&1 then $ECHO >&2 "update-pciids: $NEWFILE is read-only" exit 1 fi [ -f $NEWFILE ] && $RM $NEWFILE [ -f $NEWFILE.bz2 ] && $RM $NEWFILE.bz2 [ -f $NEWFILE.gz ] && $RM $NEWFILE.gz if [ -x $BUNZIP2 ] then EXT=".bz2" UNZIP=$BUNZIP2 elif [ -x $GUNZIP ] then EXT=".gz" UNZIP=$GUNZIP else $ECHO >&2 "update-pciids: cannot find bunzip2 or gunzip" exit 1 fi if [ -x $WGET ] then $WGET -nv -O $NEWFILE$EXT $URL$EXT > /dev/null 2>&1 elif [ -x $CURL ] then $CURL -o $NEWFILE$EXT $URL$EXT > /dev/null 2>&1 elif [ -x $LYNX ] then $LYNX -source $URL$EXT > $NEWFILE$EXT else $ECHO >&2 "update-pciids: cannot find wget, curl or lynx" exit 1 fi $UNZIP < $NEWFILE$EXT > $NEWFILE $RM $NEWFILE$EXT if ! $GREP > /dev/null "^C " $NEWFILE then $ECHO >&2 "update-pciids: missing class info, probably truncated file" exit 1 fi date=$( $GREP -E "^#[[:space:]]Date:[[:space:]]*" $NEWFILE 2> /dev/null | $SED "s/^#[[:space:]]Date:[[:space:]]*//" ) if [ -z "$date" ] then $ECHO >&2 "update-pciids: missing snapshot date, probably truncated file" exit 1 fi if [ -f $FILE ] then $CHOWN --reference="$FILE" "$NEWFILE" $CHMOD --reference="$FILE" "$NEWFILE" [ -f $OLDFILE ] && $RM $OLDFILE $MV $FILE $OLDFILE fi $MV $NEWFILE $FILE $TOUCH -d "$date" $FILE if [ -f $FILE.gz ] then [ -f $OLDFILE.gz ] && $RM $OLDFILE.gz $MV $FILE.gz $OLDFILE.gz fi if [ $quiet = "no" ] then $ECHO "Downloaded daily snapshot dated $date" fi exit 0