i.configmapconf revision 7c478bd95313f5f23a4c958a745db2134aa03244
#!/bin/sh
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License, Version 1.0 only
# (the "License"). You may not use this file except in compliance
# with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
#
#pragma ident "%Z%%M% %I% %E% SMI"
#
#
# Copyright (c) 2001 by Sun Microsystems, Inc.
# All rights reserved.
#
# Note that this script imposes restriction on the format of the new file
# that is delivered by the package.
# The format has to be:
# selection=enable idvendor=16 idproduct=32 cfgndx=1;
# Each record is a separate line, all single spaces, and all values in
# decimal
#
hex2dec()
{
printf "ibase=16\n %s\n" $* | bc
}
CLEANUP_FILE=/tmp/CLEANUP
TMP_FILE=/tmp/configmap.$$
export TMP_FILE
while read src dst
do
# Now merge the contents of the old and the new CONF_MAP file.
# src is the new file that this package is installing, and dst is the
# file present on the system.
# The algorithm to merge them is simple. We skim and filter out those entries
# from dst file that we don't want from the src file. These entries are the
# disabled entries and the ones that have idvendor and idproduct only.
# This list of unwanted items is constructed as a grep string. Finally, we
# do a "grep -v" of these items from src file, and add the remaining entries
# to the dst file.
#
CONF_MAP=$dst
CONF_MAP_OLD=${dst}.old
CONF_MAP_NEW=$src
if [ -f ${CONF_MAP} ]
then
# There is an existing file on the system. Save it as .old
# if .old exists, move it to .old.xxx
if [ -f ${CONF_MAP_OLD} ]
then
# suffix is day, hr, min, sec
# - it should be unique enough
suffix=`date '+%d%H''%M''%S'`
mv ${CONF_MAP_OLD} ${CONF_MAP_OLD}.$suffix
echo "EXISTING_FILE_SAVED_TO_OLD: ${CONF_MAP_OLD} "\
"${CONF_MAP_OLD}.$suffix" >> ${CLEANUP_FILE}
fi
cp $CONF_MAP $CONF_MAP_OLD
# build a string of items that we don't want from the new file.
grepstr="^\*|^\#"
echo $grepstr > $TMP_FILE
# preprocess the old file
sed -e \
'
# delete comments
/^#.*/d
/^\*.*/d
# change mulitple tabs to a single space
s/[ ][ ]*/ /g
# change multiple spaces to a single space
s/[ ][ ]*/ /g
# get rid of leading spaces
s/^ //g
# get rid of trailing spaces
s/[ ][ ]*$//g
# strip spaces around =
s/[ ]*=[ ]*/=/g
# put everything to lower case
y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' \
$CONF_MAP |
# get rid of newlines
tr -s "\n" " " |
# make each record into a single line
tr ";" "\n" |
# fish out entries that are enabled or disabled but have no
# pathname/srno specified
egrep -v 'pathname|srno|^[ ]*$' |
while read line
do
vendorstr=""
productstr=""
for arg in $line
do
# var=${arg%=*}
# value=${arg#*=}
var=`expr $arg : '\(.*\)=.*' \| $arg`
value=`expr $arg : '.*=\(.*\)' \| $arg`
case $var in
idvendor)
# val=${value#0x}
val=`expr $value : \
'[0][xX]\(.*\)' \
\| $value`
if [ "$value" != "$val" ]
then
# hex -> dec
val=`hex2dec $val`
fi
vendorstr="idvendor=$val"
;;
idproduct)
# val=${value#0x}
val=`expr $value : \
'[0][xX]\(.*\)' \
\| $value`
if [ "$value" != "$val" ]
then
# hex -> dec
val=`hex2dec $val`
fi
productstr="idproduct=$val"
;;
esac
done
# build the grep str
if [ -n "$vendorstr" ] || [ -n "$productstr" ]
then
grepstr="$grepstr|$vendorstr $productstr"
fi
echo $grepstr > $TMP_FILE
done
# grepstr now contains all the entries that we don't want
# from new CONF_MAP
egrep -vi -f $TMP_FILE $CONF_MAP_NEW >> $CONF_MAP
rm $TMP_FILE
else
# we are newly installing this file
cp $CONF_MAP_NEW $CONF_MAP
fi
done
exit 0