Skip to content

Commit 5ebf532

Browse files
committed
Use bash-specific optimizations in the init.d functions
Signed-off-by: Alexey Gladkov <gladkov.alexey@gmail.com>
1 parent 7bcf788 commit 5ebf532

File tree

2 files changed

+99
-106
lines changed

2 files changed

+99
-106
lines changed

runtime/data/etc/rc.d/init.d/functions

Lines changed: 88 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ fi
5656
start_daemon()
5757
{
5858
# Process options.
59-
local ANNOUNCE=1 BACKGROUND='' BASENAME='' CHECK='' CMDNAME='' DISPNAME='' EXPECT='' FLAGS='' LOCKFILE='' MAKE_PIDFILE='' NICE=0 PIDFILE='' STATUS='' SU='' WHICH=''
59+
local FLAGS ANNOUNCE=1 BACKGROUND='' BASENAME='' CHECK='' CMDNAME='' DISPNAME='' LOCKFILE='' MAKE_PIDFILE='' NICE=0 PIDFILE='' STATUS='' WHICH=''
6060

6161
while [ "$1" != "${1##[-+]}" ]; do
6262
case "$1" in
@@ -110,18 +110,25 @@ start_daemon()
110110
msg_usage "start_daemon [options]... {program}..."
111111
return 1
112112
fi
113+
113114
if [ -n "$CHECK" ] && [ -n "$CMDNAME" ]; then
114115
echo >&2 "start_daemon: --check and --name are mutually exclusive options"
115116
return 1
116117
fi
118+
117119
if [ -n "$CMDNAME" ] && [ -z "$PIDFILE" ]; then
118120
echo >&2 "start_daemon: --name is set but --pidfile is not set"
119121
return 1
120122
fi
121123

122124
# We need the absolute pathname.
123-
[ -z "$CHECK" ] || CHECK="$(absolute "$CHECK")" || return 1
124-
WHICH="$(absolute "$1")" || return 1
125+
[ -z "$CHECK" ] ||
126+
CHECK="$(absolute "$CHECK")" ||
127+
return 1
128+
129+
WHICH="$(absolute "$1")" ||
130+
return 1
131+
125132
if [ -n "$CMDNAME" ]; then
126133
BASENAME="${CMDNAME##*/}"
127134
elif [ -n "$CHECK" ]; then
@@ -130,36 +137,34 @@ start_daemon()
130137
BASENAME="${1##*/}"
131138
fi
132139
shift
133-
[ -n "$BASENAME" ] || return 1
134-
[ -n "$DISPNAME" ] || DISPNAME="$BASENAME"
140+
141+
[ -n "$BASENAME" ] ||
142+
return 1
143+
144+
DISPNAME="${DISPNAME:-$BASENAME}"
135145

136146
[ "${RDLOG-}" != 'console' ] ||
137147
ANNOUNCE=''
138148

139-
# Use a safe umask
140-
#umask 077
141-
142-
# Don't export these because they may be invalid under another UID and the
143-
# directories may be gone while the daemon is still running.
144-
local HOME='' TMP='' TMPDIR=''
149+
FLAGS=("--start" "-N" "$NICE")
145150

146-
FLAGS="--start -N $NICE"
147151
if [ -n "$CMDNAME" ]; then
148-
FLAGS="$FLAGS --startas $WHICH --name $CMDNAME"
152+
FLAGS+=("--startas" "$WHICH" "--name" "$CMDNAME")
149153
elif [ -n "$CHECK" ]; then
150-
FLAGS="$FLAGS --exec $CHECK --startas $WHICH"
154+
FLAGS+=("--exec" "$CHECK" "--startas" "$WHICH")
151155
else
152-
FLAGS="$FLAGS --exec $WHICH"
156+
FLAGS+=("--exec" "$WHICH")
153157
fi
154-
[ -z "$PIDFILE" ] || FLAGS="$FLAGS --pidfile $PIDFILE"
155-
[ -z "$BACKGROUND" ] || FLAGS="$FLAGS $BACKGROUND"
156-
[ -z "$MAKE_PIDFILE" ] || FLAGS="$FLAGS $MAKE_PIDFILE"
158+
[ -z "$PIDFILE" ] || FLAGS+=("--pidfile" "$PIDFILE")
159+
[ -z "$BACKGROUND" ] || FLAGS+=("$BACKGROUND")
160+
[ -z "$MAKE_PIDFILE" ] || FLAGS+=("$MAKE_PIDFILE")
157161

158162
# Announce the action.
159-
[ -z "$ANNOUNCE" ] || msg_starting "$DISPNAME"
163+
[ -z "$ANNOUNCE" ] ||
164+
msg_starting "$DISPNAME"
160165

161166
# Actually start the daemon.
162-
start-stop-daemon $FLAGS -- "$@"
167+
start-stop-daemon "${FLAGS[@]}" -- "$@"
163168
STATUS=$?
164169

165170
if [ $STATUS = 0 ]; then
@@ -173,13 +178,35 @@ start_daemon()
173178
return $STATUS
174179
}
175180

181+
guess_basename_dispname()
182+
{
183+
[ -n "$CMDNAME" ] &&
184+
BASENAME="${CMDNAME##*/}" ||
185+
BASENAME="${NAME##*/}" ||
186+
return 1
187+
188+
DISPNAME="${DISPNAME:-$BASENAME}"
189+
}
190+
191+
guess_pidfile()
192+
{
193+
# Try to guess the PID file if one isn't specified manually.
194+
if [ -z "$PIDFILE" ]; then
195+
PIDFILE="/var/run/$BASENAME.pid"
196+
[ -f "$PIDFILE" ] || PIDFILE=
197+
elif [ "$PIDFILE" = none ]; then
198+
PIDFILE=
199+
fi
200+
}
201+
176202
stop_daemon()
177203
{
178204
# Process options.
179-
local ANNOUNCE=1 BASENAME='' CMDNAME='' DEFAULT=true DISPNAME='' EXPECT='' FLAGS='' LOCKFILE='' MESSAGE='' NAME='' PIDFILE='' RETRY='' SIGNAL='' STATUS='' WHICH=''
205+
local FLAGS ANNOUNCE=1 BASENAME='' CMDNAME='' DEFAULT=true DISPNAME='' LOCKFILE='' MESSAGE='' NAME='' PIDFILE='' RETRY='' SIGNAL='' STATUS='' WHICH=''
180206

181207
# start-stop-daemon wants a signal number.
182208
SIGNAL="$(/bin/kill -l TERM)" || SIGNAL=15
209+
183210
while [ $# -ge 1 ]; do
184211
case "$1" in
185212
--) shift
@@ -234,51 +261,44 @@ stop_daemon()
234261
msg_usage "stop_daemon [options]... {program}..."
235262
return 1
236263
fi
237-
WHICH="$(absolute "$NAME")" || return 1
238-
[ -n "$CMDNAME" ] &&
239-
BASENAME="${CMDNAME##*/}" ||
240-
BASENAME="${NAME##*/}" || return 1
241264

242-
[ -n "$DISPNAME" ] || DISPNAME="$BASENAME"
265+
WHICH="$(absolute "$NAME")" ||
266+
return 1
243267

244268
[ "${RDLOG-}" != 'console' ] ||
245269
ANNOUNCE=''
246270

247-
# Try to guess the PID file if one isn't specified manually.
248-
if [ -z "$PIDFILE" ]; then
249-
PIDFILE="/var/run/$BASENAME.pid"
250-
[ -f "$PIDFILE" ] || PIDFILE=
251-
elif [ "$PIDFILE" = none ]; then
252-
PIDFILE=
253-
fi
271+
guess_basename_dispname
272+
guess_pidfile
254273

255274
if [ -n "$CMDNAME" ] && [ -z "$PIDFILE" ]; then
256275
echo "stop_daemon: --name is set but --pidfile is not set" >&2
257276
return 1
258277
fi
259278

260-
FLAGS="--stop -q"
279+
FLAGS=("--stop" "-q")
280+
261281
[ -z "$CMDNAME" ] &&
262-
FLAGS="$FLAGS --exec $WHICH" ||
263-
FLAGS="$FLAGS --name $CMDNAME"
264-
[ -z "$PIDFILE" ] || FLAGS="$FLAGS --pidfile $PIDFILE"
265-
# [ -z "$RETRY" ] || FLAGS="$FLAGS --retry $RETRY"
282+
FLAGS+=("--exec" "$WHICH") ||
283+
FLAGS+=("--name" "$CMDNAME")
266284

267-
if [ "$DEFAULT" = true ]; then
268-
MESSAGE="$BASENAME shutdown"
269-
else
270-
MESSAGE="sending signal $SIGNAL to $BASENAME"
271-
fi
285+
[ -z "$PIDFILE" ] ||
286+
FLAGS+=("--pidfile" "$PIDFILE")
272287

273288
# Announce the action.
274-
[ -z "$ANNOUNCE" ] || msg_stopping "$DISPNAME"
289+
[ -z "$ANNOUNCE" ] ||
290+
msg_stopping "$DISPNAME"
275291

276292
# Actually tell the daemon to stop.
277-
start-stop-daemon $FLAGS --signal "$SIGNAL"
293+
start-stop-daemon "${FLAGS[@]}" --signal "$SIGNAL"
278294
STATUS=$?
279295

296+
[ "$DEFAULT" = true ] &&
297+
MESSAGE="$BASENAME shutdown" ||
298+
MESSAGE="sending signal $SIGNAL to $BASENAME"
299+
280300
if [ $STATUS = 0 ]; then
281-
[ -z "$PIDFILE" ] || rm -f "$PIDFILE"
301+
[ -z "$PIDFILE" ] || rm -f "$PIDFILE"
282302
[ -z "$LOCKFILE" ] || rm -f "$LOCKFILE"
283303
[ "$BOOTUP" != verbose ] || echo -n " $DISPNAME "
284304
success "$MESSAGE"
@@ -298,7 +318,7 @@ status()
298318
fi
299319

300320
# Process options.
301-
local BASENAME='' CMDNAME='' DISPNAME='' EXPECT='' FLAGS='' LOCKFILE='' PIDFILE='' WHICH=''
321+
local FLAGS BASENAME='' CMDNAME='' DISPNAME='' LOCKFILE='' PIDFILE='' WHICH=''
302322

303323
while [ "$1" != "${1##-}" ]; do
304324
case "$1" in
@@ -332,35 +352,30 @@ status()
332352
msg_usage "status [options]... {program}"
333353
return 1
334354
fi
335-
WHICH="$(absolute "$1")" || return 1
336-
[ -n "$CMDNAME" ] &&
337-
BASENAME="${CMDNAME##*/}" ||
338-
BASENAME="${1##*/}" || return 1
339355

340-
[ -n "$DISPNAME" ] || DISPNAME="$BASENAME"
356+
WHICH="$(absolute "$1")" ||
357+
return 1
341358

342-
# Try to guess the PID file if one isn't specified manually.
343-
if [ -z "$PIDFILE" ]; then
344-
PIDFILE="/var/run/$BASENAME.pid"
345-
test -f "$PIDFILE" || PIDFILE=
346-
elif [ "$PIDFILE" = none ]; then
347-
PIDFILE=
348-
fi
359+
guess_basename_dispname
360+
guess_pidfile
349361

350362
if [ -n "$CMDNAME" ] && [ -z "$PIDFILE" ]; then
351363
echo "status: --name is set but --pidfile is not set" >&2
352364
return 1
353365
fi
354366

355367
# Actually determine the status.
356-
FLAGS="--stop --test"
357-
[ -z "$CMDNAME" ] &&
358-
FLAGS="$FLAGS --exec $WHICH" ||
359-
FLAGS="$FLAGS --name $CMDNAME"
360-
[ -z "$PIDFILE" ] || FLAGS="$FLAGS --pidfile $PIDFILE"
368+
FLAGS=("--stop" "--test")
369+
370+
[ -n "$CMDNAME" ] &&
371+
FLAGS+=("--name" "$CMDNAME") ||
372+
FLAGS+=("--exec" "$WHICH")
373+
374+
[ -z "$PIDFILE" ] ||
375+
FLAGS+=("--pidfile" "$PIDFILE")
361376

362377
# Report it.
363-
if start-stop-daemon $FLAGS >/dev/null; then
378+
if start-stop-daemon "${FLAGS[@]}" >/dev/null; then
364379
echo "$DISPNAME is running"
365380
return 0
366381
fi
@@ -370,8 +385,7 @@ status()
370385
return 1
371386
fi
372387

373-
[ -n "$LOCKFILE" ] || LOCKFILE="/var/lock/subsys/$BASENAME"
374-
if [ -f "$LOCKFILE" ]; then
388+
if [ -f "${LOCKFILE:-/var/lock/subsys/$BASENAME}" ]; then
375389
echo "$DISPNAME is dead, but subsystem is locked"
376390
return 2
377391
fi
@@ -444,6 +458,13 @@ echo_passed()
444458
return 1
445459
}
446460

461+
msg_starting() { echo_msg "Starting $1 service: "; }
462+
msg_stopping() { echo_msg "Stopping $1 service: "; }
463+
msg_reloading() { echo_msg "Reloading $1 service: "; }
464+
msg_already_running() { echo_msg "Service $1 is already running."; }
465+
msg_not_running() { echo_msg "Service $1 is not running."; }
466+
msg_usage() { printf "Usage: %s\n" "$*" >&2; }
467+
447468
# Log that something succeeded
448469
success()
449470
{
@@ -509,34 +530,3 @@ action_shell()
509530
[ $rc -eq 0 ] && success "$STRING" || failure "$STRING"
510531
return $rc
511532
}
512-
513-
msg_starting()
514-
{
515-
echo_msg "Starting $1 service: "
516-
}
517-
518-
msg_already_running()
519-
{
520-
echo_msg "Service $1 is already running."
521-
}
522-
523-
524-
msg_stopping()
525-
{
526-
echo_msg "Stopping $1 service: "
527-
}
528-
529-
msg_not_running()
530-
{
531-
echo_msg "Service $1 is not running."
532-
}
533-
534-
msg_reloading()
535-
{
536-
echo_msg "Reloading $1 service: "
537-
}
538-
539-
msg_usage()
540-
{
541-
printf "Usage: %s\n" "$*" >&2
542-
}

runtime/data/etc/rc.d/init.d/outformat

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,17 @@
66
[ -n "${RES_OFFSET-}" ] && [ "$RES_OFFSET" -gt 0 ] 2>/dev/null || RES_OFFSET=8
77

88
# Terminal sequence to move to that position.
9-
TO_COL=$(pos=$((${COLUMNS:-80} - $RES_OFFSET)); [ $pos -le 0 ] || printf "\033[%dG" $pos;)
9+
TO_COL=$(( ${COLUMNS:-80} - $RES_OFFSET ))
10+
[ "$TO_COL" -gt 0 ] 2>/dev/null || TO_COL=1
11+
12+
printf -v TO_COL "\033[%dG" "$TO_COL"
1013

1114
# Enumerate colors
12-
: "${BLACK:=0}" "${RED:=1}" "${GREEN:=2}" "${YELLOW:=3}" "${BLUE:=4}" "${MAGENTA:=5}" "${CYAN:=6}" "${WHITE:=7}"
15+
# "${BLACK:=0}" "${RED:=1}" "${GREEN:=2}" "${YELLOW:=3}" "${BLUE:=4}" "${MAGENTA:=5}" "${CYAN:=6}" "${WHITE:=7}"
1316

14-
COLOR_SUCCESS=$(printf "\033[1m\033[3%dm" $GREEN)
15-
COLOR_FAILURE=$(printf "\033[1m\033[3%dm" $RED)
16-
COLOR_WARNING=$(printf "\033[1m\033[3%dm" $YELLOW)
17-
COLOR_INFO=$(printf "\033[1m\033[3%dm" $CYAN)
18-
COLOR_BANNER=$(printf "\033[3%dm\033[4%dm" $BLUE $YELLOW)
19-
COLOR_NORMAL=$(printf "\033[39;49m\033[0;10m")
17+
printf -v COLOR_SUCCESS "\033[1m\033[3%dm" "${GREEN:-2}"
18+
printf -v COLOR_FAILURE "\033[1m\033[3%dm" "${RED:-1}"
19+
printf -v COLOR_WARNING "\033[1m\033[3%dm" "${YELLOW:-3}"
20+
printf -v COLOR_INFO "\033[1m\033[3%dm" "${CYAN:-6}"
21+
printf -v COLOR_BANNER "\033[3%dm\033[4%dm" "${BLUE:-4}" "${YELLOW:-3}"
22+
printf -v COLOR_NORMAL "\033[39;49m\033[0;10m"

0 commit comments

Comments
 (0)