X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=extras%2Fpath_id%2Fpath_id;h=0fad30cfb257d3468ce047efaf1776994be04f3c;hp=ee26dc1f8aa231d4cef773d8a20da12989d4ba74;hb=b2946df41965632c80012921a2cacbf83bc3dd80;hpb=87cf9f5aacf65d0bc186e5e525026cc760290379 diff --git a/extras/path_id/path_id b/extras/path_id/path_id old mode 100644 new mode 100755 index ee26dc1f8..0fad30cfb --- a/extras/path_id/path_id +++ b/extras/path_id/path_id @@ -95,7 +95,11 @@ handle_pci () { ;; esac done - d="pci-$pci_id-$d" + if [ "$d" ]; then + d="pci-$pci_id-$d" + else + d="pci-$pci_id" + fi D="$host_dev_path" RESULT=0 } @@ -427,35 +431,45 @@ handle_device () { full_sysfs_path="$SYSFS$DEVPATH" case "$DEVPATH" in /devices/*) - # new sysfs layout + full_sysfs_path="${full_sysfs_path%/*}" + # skip parent device of the same subsystem if [ -L $full_sysfs_path/subsystem ]; then - full_sysfs_path="${full_sysfs_path%/*}" cd "$full_sysfs_path/subsystem"; subsys="`pwd -P`" cd "$OPWD" subsys="${subsys##*/}" - if [ "$subsys" = "block" ]; then - # parent is "block", it's a partition, move one up - full_sysfs_path="${full_sysfs_path%/*}" + if [ "$subsys" = "$TYPE" ]; then + : skip same subsystem parent + full_sysfs_path="${full_sysfs_path%/*}" fi - cd $full_sysfs_path fi + # skip subsystem directory + subsys="${full_sysfs_path##*/}" + if [ "$subsys" = "$TYPE" ]; then + : skip subsystem directory + full_sysfs_path="${full_sysfs_path%/*}" + fi + cd $full_sysfs_path ;; *) # old sysfs layout - if [ ! -L $full_sysfs_path/device ] ; then - if [ -f $full_sysfs_path/range ] ; then return ; fi + if [ ! -L $full_sysfs_path/device ]; then full_sysfs_path="${full_sysfs_path%/*}" : full_sysfs_path "$full_sysfs_path" - if [ ! -L $full_sysfs_path/device -o ! -f $full_sysfs_path/dev ] ; then + if [ ! -L $full_sysfs_path/device -o ! -f $full_sysfs_path/dev ]; then return fi fi - cd $full_sysfs_path/device + if [ -L $full_sysfs_path/device/device ]; then + cd $full_sysfs_path/device/device + else + cd $full_sysfs_path/device + fi ;; esac full_sysfs_device_path="`pwd -P`" cd "$OPWD" + D=$full_sysfs_device_path while [ ! -z "$D" ] ; do case "$D" in @@ -539,7 +553,7 @@ handle_device () { ;; *) mode="" - ;; + ;; esac if [ "$d" ]; then d="$d-${rewind}st${mode}" @@ -547,22 +561,9 @@ handle_device () { fi } -case "$TYPE" in - block) - handle_device - echo "ID_PATH=$d" - ;; - scsi_tape) - handle_device - echo "ID_PATH=$d" - ;; - input) - handle_device - echo "ID_PATH=$d" - ;; - *) - RESULT=1 - ;; -esac - -exit $RESULT +handle_device +if [ -z "$d" ]; then + exit 1 +fi +echo "ID_PATH=$d" +exit 0