Sophie

Sophie

distrib > Mandriva > 2007.0 > x86_64 > media > main-testing-src > by-pkgid > 6420fb1965140a49881a9e5d13f8d582 > files > 23

udev-098-7mdv2007.0.src.rpm

#!/bin/sh

if [ -z "$SUBSYSTEM" ]; then
    echo "SUBSYSTEM not defined, exiting"
    exit -1
fi

MAX_LOOPS=1024
UDEV_RULES_FILE=/etc/udev/rules.d/61-${SUBSYSTEM}_config.rules
if [ $SUBSYSTEM = "net" ]; then
    TARGET="NAME"
    ADD=""
    SKIP=" ENV{INTERFACE}!=\"*.*\","
else
    TARGET="SYMLINK"
    ADD="+"
    SKIP=""
fi

# returns true if a directory is writeable
writeable() {
    if ln -s check $1/.is-writeable--${UDEV_RULES_FILE##*/} 2> /dev/null; then
	rm -f $1/.is-writeable--${UDEV_RULES_FILE##*/}
	return 0
    else
	return 1
    fi
}

choose_rules_file() {
    TEMP_RULES_FILE="/dev/.udev/tmp--${UDEV_RULES_FILE##*/}"
    if writeable ${UDEV_RULES_FILE%/*}; then
	RO_RULES_FILE=
    else
	RO_RULES_FILE=$UDEV_RULES_FILE
	UDEV_RULES_FILE="$TEMP_RULES_FILE"
	touch "$UDEV_RULES_FILE"
    fi

    if [ ! -f $UDEV_RULES_FILE ]; then
	cat > $UDEV_RULES_FILE <<EOF
# udev persistent rules for $SUBSYSTEM subsystem
# Generated by Mandriva udev rules
# See /etc/udev/rules.d/62-create_persistent.rules

EOF
    fi
}

read_rules() {
    choose_rules_file

    EXISTING=`sed -ne "/^[[:space:]]*#.*/b; s/.*$TARGET$ADD=\"\([^\"]*\)\".*/\1/; T; p" $UDEV_RULES_FILE $RO_RULES_FILE | sort -u`
}

already_exists() {
    echo $EXISTING | grep -q "\b$1\b"
}

add_result() {
    if [ -z "$RESULTS" ]; then
	RESULTS=$1
    else
	RESULTS="$RESULTS $1"
    fi
}

add_first_available() {
    BASE=$1
    [ -z "$ADD" ] || already_exists $BASE || add_result $BASE
    i=0
    while [ $MAX_LOOPS -gt $i ] && already_exists "$BASE$i"; do
	: $((i++))
    done
    add_result "$BASE$i"
}

write_rule() {
    MATCH=$1
    echo "SUBSYSTEM==\"$SUBSYSTEM\", ACTION==\"add\",$SKIP $MATCH, $TARGET$ADD=\"$RESULTS\", ENV{MDV_CONFIGURED}=\"yes\"" >> $UDEV_RULES_FILE
}