On Thu, 2010-07-01 at 00:00 +0200, Thomas Bächler wrote: > Am 30.06.2010 23:47, schrieb Victor Lowther: > > 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. > > Lots of hunks below that have nothing to do with the actual change made > here: Probably got smashed in. I did alot of git rebase -i to clean things up. Splitting it back out will not be a problem. > > 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 > > } > > Here the actual patch starts, the above doesn't belong into this patch. > You should _really_ check out git add -p/-i > > > # 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" > > } > > += in bash? Really? Didn't know that worked. > > > 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 > > + > > Nice, I didn't know you could do that. > > > # Function for setting console font if required > > set_consolefont() { > > if [ -n "$CONSOLEFONT" ]; then > > -- Victor Lowther LPIC2 UCP RHCE