Go ahead and declare add_hook and run_hook as readonly functions
to prevent hooks from overwriting them.  Too bad bash does not have
lexically scoped variables -- if it does, we could do the same with
the hook_funcs associative array.
---
 functions |   49 ++++++++++++++++++++++++++-----------------------
 1 files changed, 26 insertions(+), 23 deletions(-)

diff --git a/functions b/functions
index 8bbdfc6..d9f55fa 100644
--- a/functions
+++ b/functions
@@ -148,38 +148,39 @@ in_array() {
 # daemons:
 
 add_daemon() {
-       [ -d /var/run/daemons ] || /bin/mkdir -p /var/run/daemons
-       /bin/touch /var/run/daemons/$1
+       [[ -d /var/run/daemons ]] || /bin/mkdir -p /var/run/daemons
+       > /var/run/daemons/"$1"
 }
 
 rm_daemon() {
-       /bin/rm -f /var/run/daemons/$1
+       /bin/rm -f /var/run/daemons/"$1"
 }
 
 ck_daemon() {
-       [ -f /var/run/daemons/$1 ] && return 1
-       return 0
+       [[ ! -f /var/run/daemons/$1 ]]
 }
 
-ck_depends() {
-       for daemon in $@; do
-               if ck_daemon $daemon; then
-                       /etc/rc.d/$daemon start
-               fi
-       done
+have_daemon() {
+    [[ -x /etc/rc.d/"$1" ]]
 }
 
 start_daemon() {
-       /etc/rc.d/$1 start
+    have_daemon "$1" && /etc/rc.d/"$1" start
+}
+
+ck_depends() {
+    for daemon in "$@"; do
+       ck_daemon "$daemon" && start_daemon "$daemon" 
+    done
 }
 
 start_daemon_bkgd() {
        stat_bkgd "Starting $1"
-       (/etc/rc.d/$1 start) &>/dev/null &
+       have_daemon "$1" && (start_daemon "$1") &>/dev/null &
 }
 
 stop_daemon() {
-       /etc/rc.d/$1 stop
+       have_daemon "$1" && /etc/rc.d/"$1" stop
 }
 
 # Status functions
@@ -234,24 +235,26 @@ ck_status() {
 # single_postkillall: after all processes have been killed in rc.single
 # shutdown_poweroff: directly before powering off in rc.shutdown
 #
-# Make sure to never override the add_hook and run_hook functions via 
functions.d
+# Declare add_hook and run_hook as read-only to prevent overwriting them.
+# Too bad we cannot do the same thing with hook_funcs 
 
 declare -A hook_funcs
 
 add_hook() {
-       [ -z "$1" -o -z "$2" ] && return 1
-       hook_funcs["$1"]="${hook_funcs["$1"]} $2"
+       [[ $1 && $2 ]] || return 1
+       hook_funcs["$1"]+=" $2"
 }
 
 run_hook() {
-       local func
-
-       [ -z "$1" ] && return 1
-       for func in ${hook_funcs["$1"]}; do
-               ${func}
-       done
+    [[ $1 ]] || return 1
+    local func
+    for func in ${hook_funcs["$1"]}; do
+       "${func}"
+    done
 }
 
+declare -r add_hook run_hook
+
 # Function for setting console font if required
 set_consolefont() {
     if [ -n "$CONSOLEFONT" ]; then
-- 
1.7.1

Reply via email to