led_ctrl: error checking in a better shape
authorThomas Monjalon <thomas@monjalon.net>
Mon, 8 Nov 2010 10:45:58 +0000 (11:45 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Mon, 8 Nov 2010 13:06:06 +0000 (14:06 +0100)
Check in the form of an assert.
Do not check for real files (-e instead of -f): it allows links.

led_ctrl/led_ctrl

index 52a39ef..a0c6e3b 100755 (executable)
@@ -14,7 +14,7 @@ log_and_exec()
 
 log_and_die()
 {
-       echo "$@" >&2
+       printf "$@\n" >&2
        exit 1
 }
 
@@ -37,13 +37,14 @@ set_led_mode() # <mode>
        local section leds settings setting attr value
 
        section=$(sed -n -e "s/#.*//" -e "/{$1}/,/{.*}/p" $CONFILE)
-       [ -n "$section" ] || log_and_die "no mode $1 in $CONFILE"
+       [ -n "$section" ] || \
+               log_and_die "no mode $1 in $CONFILE"
 
        echo "$section" | grep '=' | while read leds settings; do
                for setting in $settings; do
                        attr=$(echo $setting | cut -d'=' -f1)
                        value=$(echo $setting | cut -d'=' -f2)
-                       [ -z "$attr" -o -z "$value" ] && \
+                       [ -n "$attr" -a -n "$value" ] || \
                                log_and_die "$CONFILE: mode=$1 leds=$leds, invalid setting $setting"
                        set_led_attr "$leds" $attr $value || \
                                log_and_die "$CONFILE: unable to apply $attr=$value for $leds"
@@ -58,7 +59,9 @@ list_led_modes()
 
 run_test() # <message> <test>
 {
-        eval "$2" && echo "$1 : OK" || { echo "$1 : FAIL"; TEST_ERR=1; } 
+       eval "$2" && \
+               echo "$1 : OK" || \
+               { echo "$1 : FAIL"; TEST_ERR=1; } 
 }
 
 run_test_suite()
@@ -181,8 +184,7 @@ while [ $# -gt 0 ]; do
                exit 0
                ;;
          -*)
-               echo "unknown argument: $1"
-               log_and_die "$(usage)"
+               log_and_die "unknown argument: $1\n\n$(usage)"
                ;;
          *)
                MODE=$1
@@ -193,12 +195,10 @@ done
 
 $TESTS && { run_test_suite; exit $?; }
 
-if [ ! -f $CONFILE ]; then
-       echo "no configuration file: $CONFILE"
-       log_and_die "$(usage)"
-fi
 [ -n "$(ls -A $SYSPATH 2>/dev/null)" ] || \
        log_and_die "missing or empty sysfs LED directory: $SYSPATH"
+[ -e $CONFILE ] || \
+       log_and_die "no configuration file: $CONFILE\n\n$(usage)"
 
 if [ -n "$MODE" ]; then
        set_led_mode $MODE