All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Marco d'Itri" <md@Linux.IT>
To: linux-hotplug@vger.kernel.org
Subject: remove bashisms from hotplug
Date: Tue, 25 Nov 2003 13:45:09 +0000	[thread overview]
Message-ID: <marc-linux-hotplug-106976799717012@msgid-missing> (raw)

[-- Attachment #1: Type: text/plain, Size: 158 bytes --]

These patches remove bashisms from hotplug (tested with the debian dash
shell) and add (partial) support for sysfs.

-- 
ciao, |
Marco | [3276 svFzLScsoTJLw]

[-- Attachment #2: posix-shell1.diff --]
[-- Type: text/plain, Size: 7445 bytes --]

diff -urN hotplug.orig/hotplug.functions hotplug/hotplug.functions
--- hotplug.orig/hotplug.functions	2003-10-07 23:15:38.000000000 +0200
+++ hotplug/hotplug.functions	2003-10-28 21:55:50.000000000 +0100
@@ -47,17 +47,6 @@
     mesg "$@"
 }
 
-#
-# The modules.*map parsing uses BASH ("declare -i") and some version
-# of AWK, typically /bin/gawk.  Most GNU/Linux distros have these,
-# but some specialized ones (floppy based, etc) may not.  ("type -p"
-# is also a bash-ism, more robust than "which".)
-#
-AWK=`type -p gawk`
-if [ "$AWK" = "" ]; then
-    AWK=`type -p awk`
-fi
-
 
 #
 # Not "modprobe --autoclean" ... one driver module can handle many
diff -urN hotplug.orig/ieee1394.agent hotplug/ieee1394.agent
--- hotplug.orig/ieee1394.agent	2003-09-16 21:42:17.000000000 +0200
+++ hotplug/ieee1394.agent	2003-10-28 21:49:52.000000000 +0100
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
 #
 # IEEE1394-specific hotplug policy agent.
 #
@@ -24,7 +24,7 @@
 #
 
 cd /etc/hotplug
-. hotplug.functions
+. ./hotplug.functions
 # DEBUG=yes export DEBUG
 
 # generated by modutils 2.4.9 or later, for 2.4.10 and later kernels
@@ -39,12 +39,10 @@
 fi
 
 
-declare -i device_vendor_id device_specifier_id device_version
-device_vendor_id="0x$VENDOR_ID"
-device_specifier_id="0x$SPECIFIER_ID"
-device_version="0x$VERSION"
+device_vendor_id=$((0x$VENDOR_ID))
+device_specifier_id=$((0x$SPECIFIER_ID))
+device_version=$((0x$VERSION))
 
-declare -i MATCH_VENDOR_ID MATCH_SPECIFIER_ID MATCH_VERSION
 MATCH_VENDOR_ID=0x0001
 MATCH_SPECIFIER_ID=0x0004
 MATCH_VERSION=0x0008
@@ -56,8 +54,11 @@
 ieee1394_map_modules ()
 {
     local module ignored
-    declare -i match_flags vendor_id model_id
-    declare -i specifier_id version
+
+    # convert from hex to dec
+    match_flags=$(($match_flags))
+    vendor_id=$(($vendor_id)); model_id=$(($model_id))
+    specifier_id=$(($specifier_id)); version=$(($version))
 
     # comment line lists (current) pci_device_id field names
     read ignored
@@ -98,7 +99,7 @@
     	load_drivers ieee1394 $MAP_CURRENT "$LABEL"
     fi
 
-    if [ "$DRIVERS" == "" ]; then
+    if [ "$DRIVERS" = "" ]; then
 	mesg "... no drivers for $LABEL"
 	exit 2
     fi
diff -urN hotplug.orig/pci.agent hotplug/pci.agent
--- hotplug.orig/pci.agent	2003-09-16 21:42:17.000000000 +0200
+++ hotplug/pci.agent	2003-10-28 21:49:56.000000000 +0100
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
 #
 # PCI-specific hotplug policy agent.
 #
@@ -33,7 +33,7 @@
 #
 
 cd /etc/hotplug
-. hotplug.functions
+. ./hotplug.functions
 
 # generated by modutils, for current 2.4.x kernels
 MAP_CURRENT=$MODULE_DIR/modules.pcimap
@@ -57,31 +57,22 @@
 # extra filtering.
 #
 
-# inputs to the match algorithm, from kernel by way of /sbin/hotplug
-declare -i pci_class
-declare -i pci_id_vendor pci_id_device
-declare -i pci_subid_vendor pci_subid_device
-
+# convert from hex to dec the input values passed by the kernel to
+# /sbin/hotplug
 pci_convert_vars ()
 {
-    if [ "$AWK" = "" ]; then
-	mesg "can't find awk!"
-	exit 1
-    fi
+    pci_class=$((0x$PCI_CLASS))
 
-    pci_class=0x$PCI_CLASS
-
-    set `echo $PCI_ID | $AWK -F: '{print "0x" $1, "0x" $2 }'` ''
-    pci_id_vendor=$1
-    pci_id_device=$2
-
-    set `echo $PCI_SUBSYS_ID | $AWK -F: '{print "0x" $1, "0x" $2 }'` ''
-    pci_subid_vendor=$1
-    pci_subid_device=$2
+    set $(echo $PCI_ID | sed -e 's/\([^:]*\):\(.*\)/\1 \2/')
+    pci_id_vendor=$((0x$1))
+    pci_id_device=$((0x$2))
+
+    set $(echo $PCI_SUBSYS_ID | sed -e 's/\([^:]*\):\(.*\)/\1 \2/')
+    pci_subid_vendor=$((0x$1))
+    pci_subid_device=$((0x$2))
 }
 
-declare -i PCI_ANY
-PCI_ANY=0xffffffff
+PCI_ANY=$((0xffffffff))
 
 
 #
@@ -90,12 +81,7 @@
 #
 pci_map_modules ()
 {
-    # convert the usb_device_id fields to integers as we read them 
     local module ignored
-    declare -i vendor device
-    declare -i subvendor subdevice
-    declare -i class class_mask
-    declare -i class_temp
 
     # comment line lists (current) pci_device_id field names
     read ignored
@@ -110,6 +96,11 @@
 	\#*) continue ;;
 	esac
 
+	# convert the fields from hex to dec
+	vendor=$(($vendor)); device=$(($device))
+	subvendor=$(($subvendor)); subdevice=$(($subdevice))
+	class=$(($class)); class_mask=$(($class_mask))
+
 	: checkmatch $module
 
 	: vendor $vendor $pci_id_vendor
@@ -129,7 +120,7 @@
 	    continue
 	fi
 
-	class_temp="$pci_class & $class_mask"
+	class_temp=$(($pci_class & $class_mask))
 	if [ $class_temp -eq $class ]; then
 	    DRIVERS="$module $DRIVERS"
 	    : drivers $DRIVERS
@@ -154,7 +145,7 @@
     	load_drivers pci $MAP_CURRENT "$LABEL"
     fi
 
-    if [ "$DRIVERS" == "" ]; then
+    if [ "$DRIVERS" = "" ]; then
 	mesg "... no modules for $LABEL"
 	exit 2
     fi
diff -urN hotplug.orig/pci.rc hotplug/pci.rc
--- hotplug.orig/pci.rc	2003-06-06 20:27:23.000000000 +0200
+++ hotplug/pci.rc	2003-10-28 21:57:33.000000000 +0100
@@ -9,51 +9,58 @@
 PATH=/sbin:/bin:/usr/sbin:/usr/bin
 
 cd /etc/hotplug
-
-# source function library
-if [ -f /etc/init.d/functions ]; then
-	. /etc/init.d/functions
-elif [ -f /etc/rc.d/init.d/functions ]; then
-	. /etc/rc.d/init.d/functions
-fi
-
-. hotplug.functions
-
-
-# # override any of the defaults?
-# if [ -f /etc/sysconfig/pci ]; then
-#     . /etc/sysconfig/pci
-# fi
+. ./hotplug.functions
 
 pci_boot_events ()
 {
-    #
-    # FIXME on 2.5, /sys/bus/pci/devices gives some of this
-    # information, and more can be gotten with 'lspci'.
-    # don't expect pcimodules to exist!!
-    #
-    LISTER=`type -p pcimodules`
-    if [ "$LISTER" = "" -o ! -f /proc/bus/pci/devices -o ! -x pci.agent ]; then
-	    echo $"** can't synthesize pci hotplug events"
-	    return
-    fi
-
     # make sure the pci agent will run
     ACTION=add
     PCI_CLASS=0
     PCI_ID=0:0
-    PCI_SLOT=0:0.0
     PCI_SUBSYS_ID=0:0
-    export ACTION PCI_CLASS PCI_ID PCI_SLOT PCI_SUBSYS_ID
+    PCI_SLOT_NAME=0:0.0
+    export ACTION PCI_CLASS PCI_ID PCI_SLOT_NAME PCI_SUBSYS_ID
+
+    if [ -d /sys/bus/pci/devices/ ]; then
+	# 2.6 kernels
+
+	cd /sys/bus/pci/devices/
+	for PCI_DEVICE in *; do
+	    set `echo $PCI_DEVICE \
+		| sed -e 's/\([^:]*\):\(.*\):\(.*\)\.\(.*\)/\1 \2 \3 \4/'`
+	    PCI_SLOT_NAME=$2:$3.$4
+	    PCI_CLASS="`cat $PCI_DEVICE/class`"
+	    PCI_CLASS=${PCI_CLASS#0x}
+	    vendor_id=`cat $PCI_DEVICE/vendor`
+	    device_id=`cat $PCI_DEVICE/device`
+	    PCI_ID="${vendor_id#0x}:${device_id#0x}"
+	    sub_vendor_id=`cat $PCI_DEVICE/subsystem_vendor`
+	    sub_device_id=`cat $PCI_DEVICE/subsystem_device`
+	    PCI_SUBSYS_ID="${sub_vendor_id#0x}:${sub_device_id#0x}"
 
-    # these notifications will be handled by pcimodules
-    for BUS in `cd /proc/bus/pci;find * -type d -print`; do
-	for SLOT_FUNC in `cd /proc/bus/pci/$BUS; echo *`; do
-	    PCI_SLOT=$BUS:$SLOT_FUNC
-	    : hotplug pci for $PCI_SLOT
+	    debug_mesg "Detected $PCI_DEVICE $PCI_ID ($PCI_SUBSYS_ID, $PCI_CLASS)"
 	    /sbin/hotplug pci
 	done
-    done
+
+    else
+
+	LISTER=`type -p pcimodules`
+	if [ "$LISTER" = "" -o ! -f /proc/bus/pci/devices -o ! -x pci.agent ]; then
+	    echo $"** can't synthesize pci hotplug events"
+	    return
+	fi
+
+	# these notifications will be handled by pcimodules
+	for BUS in `cd /proc/bus/pci;find * -type d -print`; do
+	    for SLOT_FUNC in `cd /proc/bus/pci/$BUS; echo *`; do
+		PCI_SLOT_NAME=$BUS:$SLOT_FUNC
+		: hotplug pci for $PCI_SLOT_NAME
+		/sbin/hotplug pci
+	    done
+	done
+
+    fi
+    return 0
 }
 
 # See how we were called.

[-- Attachment #3: posix-shell2.diff --]
[-- Type: text/plain, Size: 14214 bytes --]

diff -urN hotplug.orig1/firmware.agent hotplug/firmware.agent
--- hotplug.orig1/firmware.agent	2003-10-07 21:34:19.000000000 +0200
+++ hotplug/firmware.agent	2003-10-29 02:24:31.000000000 +0100
@@ -16,7 +16,7 @@
 #
 
 cd /etc/hotplug
-. hotplug.functions
+. ./hotplug.functions
 # DEBUG=yes export DEBUG
 
 # directory of the firmware files
diff -urN hotplug.orig1/input.agent hotplug/input.agent
--- hotplug.orig1/input.agent	2003-10-14 01:52:54.000000000 +0200
+++ hotplug/input.agent	2003-10-29 22:23:16.000000000 +0100
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
 #
 # input-specific hotplug policy agent.
 #
@@ -30,7 +30,7 @@
 #
 
 cd /etc/hotplug
-. hotplug.functions
+. ./hotplug.functions
 # DEBUG=yes export DEBUG
 
 # generated by module-init-tools
@@ -51,14 +51,16 @@
 # Each modules.inputmap format line corresponds to one entry in a
 # MODULE_DEVICE_TABLE(input,...) declaration in a kernel file.
 #
-declare -i matchBits=0
-declare -i i_bustype=0 i_vendor=0 i_product=0 i_version=0
-declare -i i_evBits=0
-declare i_keyBits i_relBits i_absBits i_mscBits i_ledBits i_sndBits i_ffBits
+matchBits=0
+i_bustype=0
+i_vendor=0
+i_product=0
+i_version=0
+i_evBits=0
 
 input_join_words ()
 {
-    declare name=$1 array=$2 tmp
+    local name="$1" array="$2" tmp
     if [ "$array" = '' ]; then
 	return
     fi
@@ -81,14 +83,14 @@
 	IFS=/
 	set $PRODUCT ''
 	IFS="$DEFAULT_IFS"
-	i_bustype=0x$1
-	i_vendor=0x$2
-	i_product=0x$3
-	i_version=0x$4
+	i_bustype=$((0x$1))
+	i_vendor=$((0x$2))
+	i_product=$((0x$3))
+	i_version=$((0x$4))
     fi
 
     if [ "$EV" != "" ]; then
-	i_evBits=0x$EV
+	i_evBits=$((0x$EV))
     fi
 
     input_join_words i_keyBits "$KEY"
@@ -100,27 +102,26 @@
     input_join_words i_ffBits  "$FF"
 }
 
-declare -i INPUT_DEVICE_ID_MATCH_BUS=1
-declare -i INPUT_DEVICE_ID_MATCH_VENDOR=2
-declare -i INPUT_DEVICE_ID_MATCH_PRODUCT=4
-declare -i INPUT_DEVICE_ID_MATCH_VERSION=8
-declare -i INPUT_DEVICE_ID_MATCH_EVBIT=0x010
-declare -i INPUT_DEVICE_ID_MATCH_KEYBIT=0x020
-declare -i INPUT_DEVICE_ID_MATCH_RELBIT=0x040
-declare -i INPUT_DEVICE_ID_MATCH_ABSBIT=0x080
-declare -i INPUT_DEVICE_ID_MATCH_MSCBIT=0x100
-declare -i INPUT_DEVICE_ID_MATCH_LEDBIT=0x200
-declare -i INPUT_DEVICE_ID_MATCH_SNDBIT=0x400
-declare -i INPUT_DEVICE_ID_MATCH_FFBIT=0x800
+INPUT_DEVICE_ID_MATCH_BUS=1
+INPUT_DEVICE_ID_MATCH_VENDOR=2
+INPUT_DEVICE_ID_MATCH_PRODUCT=4
+INPUT_DEVICE_ID_MATCH_VERSION=8
+INPUT_DEVICE_ID_MATCH_EVBIT=$((0x010))
+INPUT_DEVICE_ID_MATCH_KEYBIT=$((0x020))
+INPUT_DEVICE_ID_MATCH_RELBIT=$((0x040))
+INPUT_DEVICE_ID_MATCH_ABSBIT=$((0x080))
+INPUT_DEVICE_ID_MATCH_MSCBIT=$((0x100))
+INPUT_DEVICE_ID_MATCH_LEDBIT=$((0x200))
+INPUT_DEVICE_ID_MATCH_SNDBIT=$((0x400))
+INPUT_DEVICE_ID_MATCH_FFBIT=$((0x800))
 
 
 input_match_bits ()
 {
-    declare mod_bits=$1 dev_bits=$2
-    declare -i mword dword
+    local mod_bits=$1 dev_bits=$2
 
-    mword=0x${mod_bits##*:}
-    dword=0x${dev_bits##*:}
+    mword=$((0x${mod_bits##*:}))
+    dword=$((0x${dev_bits##*:}))
 
     while true; do
 	if [ $(( $mword & $dword != $mword )) -eq 1 ]; then
@@ -151,10 +152,7 @@
 input_map_modules ()
 {
     local line module
-    declare -i matchBits
-    declare -i bustype vendor product version
-    declare -i evBits driverInfo 
-    declare relBits mscBits ledBits sndBitskeyBits absBits ffBits
+    local relBits mscBits ledBits sndBitskeyBits absBits ffBits
 
     while read line
     do
@@ -166,25 +164,26 @@
 
 	set $line
 
-	module="$1"
-	matchBits="$2"
+	module=$(($1))
+	matchBits=$(($2))
 
-	bustype="$3"
-	vendor="$4"
-	product="$5"
-	product="$6"
-
-	evBits="$7"
-	keyBits="$8"
-	relBits="$9"
+	bustype=$(($3))
+	vendor=$(($4))
+	product=$(($5))
+	product=$(($6))
+
+	evBits=$(($7))
+echo "|||$8|||"
+	keyBits=$(($8))
+	relBits=$(($9))
 
 	shift 9
-	absBits="$1"
-	cbsBits="$2"
-	ledBits="$3"
-	sndBits="$4"
-	ffBits="$5"
-	driverInfo="$6"
+	absBits=$(($1))
+	cbsBits=$(($2))
+	ledBits=$(($3))
+	sndBits=$(($4))
+	ffBits=$(($5))
+	driverInfo=$(($6))
 
 	: checkmatch $module
 
diff -urN hotplug.orig1/input.rc hotplug/input.rc
--- hotplug.orig1/input.rc	2003-10-14 01:52:54.000000000 +0200
+++ hotplug/input.rc	2003-10-29 22:19:12.000000000 +0100
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
 #
 # input.rc	This loads handlers for those input devices
 #		that have drivers compiled in kernel
@@ -61,7 +61,7 @@
     export PRODUCT NAME PHYS EV KEY REL ABS MSC LED SND FF
     input_reset_state
 
-    declare line
+    local line
 
     #
     # the following reads from /proc/bus/input/devices. It is inherently
diff -urN hotplug.orig1/net.agent hotplug/net.agent
--- hotplug.orig1/net.agent	2003-10-07 21:56:24.000000000 +0200
+++ hotplug/net.agent	2003-10-29 19:16:49.000000000 +0100
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
 #
 # Network hotplug policy agent for Linux 2.4 kernels
 #
@@ -17,7 +17,7 @@
 #
 
 cd /etc/hotplug
-. hotplug.functions
+. ./hotplug.functions
 # DEBUG=yes export DEBUG
 
 if [ "$INTERFACE" = "" ]; then
diff -urN hotplug.orig1/NOTES hotplug/NOTES
--- hotplug.orig1/NOTES	1970-01-01 01:00:00.000000000 +0100
+++ hotplug/NOTES	2003-10-29 02:22:51.000000000 +0100
@@ -0,0 +1,9 @@
+usb.rc:
+- PCI hotplugging is supported when sysfs is present, the HC code should
+  be removed or made conditional to 2.4 kernels
+- rmmod will always fail with some 2.6 kernel configurations, so it cannot
+  be used to check if everything has been loaded
+- could maybe_stop_usb() be improved now?
+
+firmware.agent:
+- /usr/lib/hotplug/firmware should become /usr/share/hotplug/firmware.
diff -urN hotplug.orig1/scsi.agent hotplug/scsi.agent
--- hotplug.orig1/scsi.agent	2002-12-11 23:05:06.000000000 +0100
+++ hotplug/scsi.agent	2003-10-29 19:17:07.000000000 +0100
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
 #
 # SCSI hotplug agent for 2.5 kernels 
 #
@@ -7,7 +7,7 @@
 #
 
 cd /etc/hotplug
-. hotplug.functions
+. ./hotplug.functions
 
 case $ACTION in
 
diff -urN hotplug.orig1/usb.agent hotplug/usb.agent
--- hotplug.orig1/usb.agent	2003-10-14 01:52:54.000000000 +0200
+++ hotplug/usb.agent	2003-10-29 19:08:54.000000000 +0100
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
 #
 # USB-specific hotplug policy agent.
 #
@@ -79,7 +79,7 @@
 fi
 
 cd /etc/hotplug
-. hotplug.functions
+. ./hotplug.functions
 # DEBUG=yes export DEBUG
 
 # generated by modutils, for current 2.4.x (and later) kernels
@@ -165,39 +165,31 @@
 # mechanism, but some driver probe() routines need to provide
 # extra filtering.
 #
-declare -i usb_idVendor usb_idProduct usb_bcdDevice
-declare -i usb_bDeviceClass usb_bDeviceSubClass usb_bDeviceProtocol
-declare -i usb_bInterfaceClass usb_bInterfaceSubClass usb_bInterfaceProtocol
 
 usb_convert_vars ()
 {
-    if [ "$AWK" = "" ]; then
-	mesg "can't find awk!"
-	exit 1
-    fi
-
     # work around 2.2.early brokenness
     # munges the usb_bcdDevice such that it is a integer rather
     # than a float: e.g. 1.0 become 0100
     PRODUCT=`echo $PRODUCT | sed -e "s+\.\([0-9]\)$+.\10+" -e "s/\.$/00/" \
                                   -e "s+/\([0-9]\)\.\([0-9][0-9]\)+/0\1\2+" \
 			  -e "s+/\([0-9][0-9]\)\.\([0-9][0-9]\)+/\1\2+"`
-    set `echo $PRODUCT | $AWK -F/ '{print "0x" $1, "0x" $2, "0x" $3 }'` ''
-    usb_idVendor=$1
-    usb_idProduct=$2
-    usb_bcdDevice=$3
+    set $(echo $PRODUCT | sed -e 's+\([^/]*\)/\([^/]*\)/\(.*\)+\1 \2 \3+')
+    usb_idVendor=$((0x$1))
+    usb_idProduct=$((0x$2))
+    usb_bcdDevice=$((0x$3))
 
     if [ "$TYPE" != "" ]; then
     	IFS=/
     	set $TYPE ''
-	usb_bDeviceClass=$1
-        usb_bDeviceSubClass=$2
-        usb_bDeviceProtocol=$3
+	usb_bDeviceClass=$((0x$1))
+        usb_bDeviceSubClass=$((0x$2))
+        usb_bDeviceProtocol=$((0x$3))
 	IFS="$DEFAULT_IFS"
     elif [ -r $SYSFS/$DEVPATH/bDeviceClass ]; then
-	usb_bDeviceClass=0x$(cat $SYSFS/$DEVPATH/bDeviceClass)
-	usb_bDeviceSubClass=0x$(cat $SYSFS/$DEVPATH/bDeviceSubClass)
-	usb_bDeviceProtocol=0x$(cat $SYSFS/$DEVPATH/bDeviceProtocol)
+	usb_bDeviceClass=$((0x$(cat $SYSFS/$DEVPATH/bDeviceClass)))
+	usb_bDeviceSubClass=$((0x$(cat $SYSFS/$DEVPATH/bDeviceSubClass)))
+	usb_bDeviceProtocol=$((0x$(cat $SYSFS/$DEVPATH/bDeviceProtocol)))
     else
 	# out-of-range values
 	usb_bDeviceClass=1000
@@ -208,14 +200,14 @@
     if [ "$INTERFACE" != "" ]; then
 	IFS=/
 	set $INTERFACE ''
-	usb_bInterfaceClass=$1
-	usb_bInterfaceSubClass=$2
-    	usb_bInterfaceProtocol=$3
+	usb_bInterfaceClass=$((0x$1))
+	usb_bInterfaceSubClass=$((0x$2))
+    	usb_bInterfaceProtocol=$((0x$3))
 	IFS="$DEFAULT_IFS"
     elif [ -r $SYSFS/$DEVPATH/bInterfaceClass ]; then
-	usb_bInterfaceClass=0x$(cat $SYSFS/$DEVPATH/bInterfaceClass)
-	usb_bInterfaceSubClass=0x$(cat $SYSFS/$DEVPATH/bInterfaceSubClass)
-	usb_bInterfaceProtocol=0x$(cat $SYSFS/$DEVPATH/bInterfaceProtocol)
+	usb_bInterfaceClass=$((0x$(cat $SYSFS/$DEVPATH/bInterfaceClass)))
+	usb_bInterfaceSubClass=$((0x$(cat $SYSFS/$DEVPATH/bInterfaceSubClass)))
+	usb_bInterfaceProtocol=$((0x$(cat $SYSFS/$DEVPATH/bInterfaceProtocol)))
     else
 	# out-of-range values
 	usb_bInterfaceClass=1000
@@ -224,16 +216,16 @@
     fi
 }
 
-declare -i USB_MATCH_VENDOR=0x0001
-declare -i USB_MATCH_PRODUCT=0x0002
-declare -i USB_MATCH_DEV_LO=0x0004
-declare -i USB_MATCH_DEV_HI=0x0008
-declare -i USB_MATCH_DEV_CLASS=0x0010
-declare -i USB_MATCH_DEV_SUBCLASS=0x0020
-declare -i USB_MATCH_DEV_PROTOCOL=0x0040
-declare -i USB_MATCH_INT_CLASS=0x0080
-declare -i USB_MATCH_INT_SUBCLASS=0x0100
-declare -i USB_MATCH_INT_PROTOCOL=0x0200
+USB_MATCH_VENDOR=$((0x0001))
+USB_MATCH_PRODUCT=$((0x0002))
+USB_MATCH_DEV_LO=$((0x0004))
+USB_MATCH_DEV_HI=$((0x0008))
+USB_MATCH_DEV_CLASS=$((0x0010))
+USB_MATCH_DEV_SUBCLASS=$((0x0020))
+USB_MATCH_DEV_PROTOCOL=$((0x0040))
+USB_MATCH_INT_CLASS=$((0x0080))
+USB_MATCH_INT_SUBCLASS=$((0x0100))
+USB_MATCH_INT_PROTOCOL=$((0x0200))
 
 #
 # stdin is "modules.usbmap" syntax
@@ -243,10 +235,6 @@
 {
     # convert the usb_device_id fields to integers as we read them 
     local line module
-    declare -i match_flags
-    declare -i idVendor idProduct bcdDevice_lo bcdDevice_hi
-    declare -i bDeviceClass bDeviceSubClass bDeviceProtocol
-    declare -i bInterfaceClass bInterfaceSubClass bInterfaceProtocol
 
     # look at each usb_device_id entry
     # collect all matches in $DRIVERS
@@ -262,21 +250,21 @@
 	set $line
 
 	module=$1
-	match_flags=$2
+	match_flags=$(($2))
 
-	idVendor=$3
-	idProduct=$4
-	bcdDevice_lo=$5
-	bcdDevice_hi=$6
-
-	bDeviceClass=$7
-	bDeviceSubClass=$8
-	bDeviceProtocol=$9
+	idVendor=$(($3))
+	idProduct=$(($4))
+	bcdDevice_lo=$(($5))
+	bcdDevice_hi=$(($6))
+
+	bDeviceClass=$(($7))
+	bDeviceSubClass=$(($8))
+	bDeviceProtocol=$(($9))
 
 	shift 9
-	bInterfaceClass=$1
-	bInterfaceSubClass=$2
-	bInterfaceProtocol=$3
+	bInterfaceClass=$(($1))
+	bInterfaceSubClass=$(($2))
+	bInterfaceProtocol=$(($3))
 
 	: checkmatch $module
 
@@ -350,10 +338,11 @@
 # remover, or that the remove action can use to execute a remover.
 #
 if [ "$DEVICE" = "" ]; then
-  declare -rx REMOVER=/var/run/usb/`echo "$INTERFACE/$PRODUCT/$TYPE" | sed -e 's;/;%;g'`
+  REMOVER=/var/run/usb/`echo "$INTERFACE/$PRODUCT/$TYPE" | sed -e 's;/;%;g'`
 else
-  declare -rx REMOVER=/var/run/usb/`echo $DEVICE | sed -e 's;/;%;g'`
+  REMOVER=/var/run/usb/`echo $DEVICE | sed -e 's;/;%;g'`
 fi
+export REMOVER
 
 #
 # What to do with this USB hotplug event?
@@ -373,7 +362,11 @@
     usb_convert_vars
 
     FOUND=false
-    LABEL="USB product $PRODUCT"
+    if [ -f $SYSFS/$DEVPATH/manufacturer ]; then
+	LABEL="USB `cat $SYSFS/$DEVPATH/manufacturer` `cat $SYSFS/$DEVPATH/product`"
+    else
+	LABEL="USB product $PRODUCT"
+    fi
 
     if [ -e "$REMOVER" ]; then
 	rm -f "$REMOVER"
diff -urN hotplug.orig1/usb.rc hotplug/usb.rc
--- hotplug.orig1/usb.rc	2003-09-25 02:09:08.000000000 +0200
+++ hotplug/usb.rc	2003-10-29 22:27:18.000000000 +0100
@@ -21,6 +21,9 @@
 
 PATH=/sbin:/bin:/usr/sbin:/usr/bin
 
+unset I_WANT_A_BROKEN_PS
+PS_PERSONALITY=linux
+
 STATIC_MODULE_LIST=
 X11_USBMICE_HACK=false
 
@@ -76,7 +79,7 @@
 
 	# synthesize hotplug events if we can 
 	# we need (non-bash) programs to parse descriptors.
-	LISTER=`type -p usbmodules`
+	LISTER=`which usbmodules`
 	if [ "$LISTER" = "" -o ! -f /proc/bus/usb/devices ]; then
 		echo $"** can't synthesize root hub events"
 		return
@@ -85,11 +88,12 @@
 	# make sure the usb agent will run
 	ACTION=add
 	PRODUCT=0/0/0
-	export ACTION PRODUCT
-
+	TYPE=
+	INTERFACE=
+	DEVPATH=
 	DEVFS=/proc/bus/usb
 	DEVICE=
-	export DEVFS DEVICE
+	export ACTION PRODUCT TYPE INTERFACE DEVPATH DEVFS DEVICE
 
 	# these notifications will be handled by usbmodules
 	# NOTE: we're not providing a full set of hotplug
@@ -100,10 +104,27 @@
 	# FIXME usbmodules, or something, should set real
 	# PRODUCT and DEVICE strings so /etc/hotplug/usb/*
 	# scripts can rely on them ...
-	for DEVICE in /proc/bus/usb/*/*
-	do
+	if [ -d /sys/bus/usb/devices ]; then
+	    cd /sys/bus/usb/devices
+	    # XXX FIXME this is not the right way...
+	    for device in /sys/bus/usb/devices/[0-9]*; do
+		DEVPATH=${device#/sys/}
+		# XXX is this correct?
+#		class=0
+		if [ -f $device/idVendor ]; then
+		    PRODUCT="`cat $device/idVendor`/`cat $device/idProduct`/`cat $device/bcdDevice`"
+#		    class=`cat $device/bDeviceClass`
+#		    TYPE="$class/`cat $device/bDeviceSubClass`/`cat $device/bDeviceProtocol`"
+                fi
+#		if [ "$class" -eq 0 -a -f $device/bInterfaceClass ]; then
+#		    INTERFACE="`cat $device/bInterfaceClass`/`cat $device/bInterfaceSubClass`/`cat $device/bInterfaceProtocol`"
+#		fi
+	    done
+	else
+	    for DEVICE in /proc/bus/usb/*/*; do
 		/etc/hotplug/usb.agent
-	done
+	    done
+	fi
 }
 
 
@@ -135,12 +156,16 @@
     if [ -d /proc/bus/usb ]; then
 	# if it's not mounted, try to mount it
 	if [ ! -f /proc/bus/usb/devices ]; then
-	    if grep -q "[	 ]/proc/bus/usb[	 ]" /etc/fstab ; then
+	    if grep -q -E "^[^#][^[:space:]]+[[:space:]]+/proc/bus/usb/?[[:space:]]" /etc/fstab; then
 		mount /proc/bus/usb
 	    else
 		# NOTE: name is changing to "usbfs" from "usbdevfs"
 		# NOTE: some versions don't create empty 'devices' files
-		mount -t usbdevfs usbdevfs /proc/bus/usb
+		if grep -q usbfs /proc/filesystems; then
+		    mount -t usbfs usbfs /proc/bus/usb
+		else
+		    mount -t usbdevfs usbdevfs /proc/bus/usb
+		fi
 	    fi
 	fi
     fi

[-- Attachment #4: posix-shell3.diff --]
[-- Type: text/plain, Size: 922 bytes --]

diff -urN hotplug.orig2/hotplug.functions hotplug/hotplug.functions
--- hotplug.orig2/hotplug.functions	2003-10-28 21:55:50.000000000 +0100
+++ hotplug/hotplug.functions	2003-10-30 02:05:59.000000000 +0100
@@ -81,7 +81,7 @@
     # ought to expose the data we need to find all candidate drivers.
     # (on 2.5.48 it does for usb; but maybe not yet for pci.)
     case "$KERNEL" in
-    2.2*|2.3*|2.4*)	LISTER=`type -p ${TYPE}modules` ;;
+    2.2*|2.3*|2.4*)	LISTER=`which ${TYPE}modules` ;;
     *)			LISTER="" ;;
     esac
 
diff -urN hotplug.orig2/pci.rc hotplug/pci.rc
--- hotplug.orig2/pci.rc	2003-10-28 21:57:33.000000000 +0100
+++ hotplug/pci.rc	2003-10-30 02:07:00.000000000 +0100
@@ -44,7 +44,7 @@
 
     else
 
-	LISTER=`type -p pcimodules`
+	LISTER=`which pcimodules`
 	if [ "$LISTER" = "" -o ! -f /proc/bus/pci/devices -o ! -x pci.agent ]; then
 	    echo $"** can't synthesize pci hotplug events"
 	    return

             reply	other threads:[~2003-11-25 13:45 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-11-25 13:45 Marco d'Itri [this message]
2003-11-25 17:34 ` remove bashisms from hotplug Chris Larson
2003-11-26 21:12 ` Joerg Sommer
2003-12-09  9:03 ` Marco d'Itri
2003-12-10  1:15 ` Greg KH
2003-12-17 19:20 ` David Brownell
2003-12-25 13:47 ` Marco d'Itri
2004-01-09 12:58 ` Olaf Hering

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=marc-linux-hotplug-106976799717012@msgid-missing \
    --to=md@linux.it \
    --cc=linux-hotplug@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.