rc_is_env is now rc_env_bool and just works with boolean values.

This commit is contained in:
Roy Marples 2007-09-26 07:05:33 +00:00
parent ab0edd43b9
commit 8a7b58a73d
9 changed files with 50 additions and 31 deletions

View File

@ -1,6 +1,11 @@
# ChangeLog for Gentoo System Intialization ("rc") scripts # ChangeLog for Gentoo System Intialization ("rc") scripts
# Copyright 1999-2007 Gentoo Foundation; Distributed under the GPLv2 # Copyright 1999-2007 Gentoo Foundation; Distributed under the GPLv2
26 Sep 2007; Roy Marples <uberlord@gentoo.org>:
rc_is_env is now rc_env_bool and just works with boolean values.
errno is set when it's not a boolean or does not exist.
25 Sep 2007; Mike Frysinger <vapier@gentoo.org>: 25 Sep 2007; Mike Frysinger <vapier@gentoo.org>:
Skip consolefont setup when RC_TTY_NUMBER is set to 0. Skip consolefont setup when RC_TTY_NUMBER is set to 0.

View File

@ -181,7 +181,7 @@ int fstabinfo (int argc, char **argv)
} }
/* No point in outputting if quiet */ /* No point in outputting if quiet */
if (rc_is_env ("RC_QUIET", "yes")) if (rc_env_bool ("RC_QUIET"))
continue; continue;
switch (output) { switch (output) {

View File

@ -57,20 +57,33 @@ char *rc_xstrdup (const char *str)
} }
librc_hidden_def(rc_xstrdup) librc_hidden_def(rc_xstrdup)
bool rc_is_env (const char *var, const char *val) bool rc_env_bool (const char *var)
{ {
char *v; char *v;
if (! var) if (! var)
return (false); return (false);
v = getenv (var); if (! (v = getenv (var))) {
if (! v) errno = ENOENT;
return (val == NULL ? true : false); return (false);
}
return (strcasecmp (v, val) == 0 ? true : false); if (strcasecmp (var, "true") == 0 ||
strcasecmp (var, "y") == 0 ||
strcasecmp (var, "yes") == 0 ||
strcasecmp (var, "1") == 0)
return (true);
if (strcasecmp (var, "false") != 0 &&
strcasecmp (var, "n") != 0 &&
strcasecmp (var, "no") != 0 &&
strcasecmp (var, "0") != 0)
errno = EINVAL;
return (false);
} }
librc_hidden_def(rc_is_env) librc_hidden_def(rc_env_bool)
char *rc_strcatpaths (const char *path1, const char *paths, ...) char *rc_strcatpaths (const char *path1, const char *paths, ...)
{ {

View File

@ -50,6 +50,7 @@
#define librc_hidden_def(x) hidden_def(x) #define librc_hidden_def(x) hidden_def(x)
librc_hidden_proto(rc_allow_plug) librc_hidden_proto(rc_allow_plug)
librc_hidden_proto(rc_env_bool)
librc_hidden_proto(rc_exists) librc_hidden_proto(rc_exists)
librc_hidden_proto(rc_filter_env) librc_hidden_proto(rc_filter_env)
librc_hidden_proto(rc_find_pids) librc_hidden_proto(rc_find_pids)
@ -64,7 +65,6 @@ librc_hidden_proto(rc_get_runlevel)
librc_hidden_proto(rc_get_runlevels) librc_hidden_proto(rc_get_runlevels)
librc_hidden_proto(rc_get_service_option) librc_hidden_proto(rc_get_service_option)
librc_hidden_proto(rc_is_dir) librc_hidden_proto(rc_is_dir)
librc_hidden_proto(rc_is_env)
librc_hidden_proto(rc_is_exec) librc_hidden_proto(rc_is_exec)
librc_hidden_proto(rc_is_file) librc_hidden_proto(rc_is_file)
librc_hidden_proto(rc_is_link) librc_hidden_proto(rc_is_link)

View File

@ -364,7 +364,7 @@ int mountinfo (int argc, char **argv)
continue; continue;
if (skip_point_regex && regexec (skip_point_regex, n, 0, NULL, 0) == 0) if (skip_point_regex && regexec (skip_point_regex, n, 0, NULL, 0) == 0)
continue; continue;
if (! rc_is_env ("RC_QUIET", "yes")) if (rc_env_bool ("RC_QUIET"))
printf ("%s\n", n); printf ("%s\n", n);
result = EXIT_SUCCESS; result = EXIT_SUCCESS;
} }

View File

@ -457,7 +457,7 @@ static bool want_interactive (void)
strcmp (PREVLEVEL, "1") != 0) strcmp (PREVLEVEL, "1") != 0)
return (false); return (false);
if (! rc_is_env ("RC_INTERACTIVE", "yes")) if (! rc_env_bool ("RC_INTERACTIVE"))
return (false); return (false);
c = read_key (false); c = read_key (false);
@ -919,7 +919,7 @@ int main (int argc, char **argv)
ecolor (ecolor_good), uts.sysname, ecolor (ecolor_bracket), ecolor (ecolor_good), uts.sysname, ecolor (ecolor_bracket),
ecolor (ecolor_normal)); ecolor (ecolor_normal));
if (rc_is_env ("RC_INTERACTIVE", "yes")) if (rc_env_bool ("RC_INTERACTIVE"))
printf ("Press %sI%s to enter interactive boot mode\n\n", printf ("Press %sI%s to enter interactive boot mode\n\n",
ecolor (ecolor_good), ecolor (ecolor_normal)); ecolor (ecolor_good), ecolor (ecolor_normal));
@ -1056,7 +1056,7 @@ int main (int argc, char **argv)
if (newlevel && strcmp (newlevel, bootlevel) == 0 && if (newlevel && strcmp (newlevel, bootlevel) == 0 &&
(strcmp (runlevel, RC_LEVEL_SINGLE) == 0 || (strcmp (runlevel, RC_LEVEL_SINGLE) == 0 ||
strcmp (runlevel, RC_LEVEL_SYSINIT) == 0) && strcmp (runlevel, RC_LEVEL_SYSINIT) == 0) &&
rc_is_env ("RC_COLDPLUG", "yes")) rc_env_bool ("RC_COLDPLUG"))
{ {
#if defined(__DragonFly__) || defined(__FreeBSD__) #if defined(__DragonFly__) || defined(__FreeBSD__)
/* The net interfaces are easy - they're all in net /dev/net :) */ /* The net interfaces are easy - they're all in net /dev/net :) */
@ -1186,7 +1186,7 @@ int main (int argc, char **argv)
/* We always stop the service when in these runlevels */ /* We always stop the service when in these runlevels */
if (going_down) { if (going_down) {
pid_t pid = rc_stop_service (service); pid_t pid = rc_stop_service (service);
if (pid > 0 && ! rc_is_env ("RC_PARALLEL", "yes")) if (pid > 0 && ! rc_env_bool ("RC_PARALLEL"))
rc_waitpid (pid); rc_waitpid (pid);
continue; continue;
} }
@ -1251,7 +1251,7 @@ int main (int argc, char **argv)
/* After all that we can finally stop the blighter! */ /* After all that we can finally stop the blighter! */
if (! found) { if (! found) {
pid_t pid = rc_stop_service (service); pid_t pid = rc_stop_service (service);
if (pid > 0 && ! rc_is_env ("RC_PARALLEL", "yes")) if (pid > 0 && ! rc_env_bool ("RC_PARALLEL"))
rc_waitpid (pid); rc_waitpid (pid);
} }
} }
@ -1352,7 +1352,7 @@ interactive_option:
if ((pid = rc_start_service (service))) if ((pid = rc_start_service (service)))
add_pid (pid); add_pid (pid);
if (! rc_is_env ("RC_PARALLEL", "yes")) { if (! rc_env_bool ("RC_PARALLEL")) {
rc_waitpid (pid); rc_waitpid (pid);
remove_pid (pid); remove_pid (pid);
} }

View File

@ -367,11 +367,12 @@ char *rc_xstrdup (const char *str);
* @param paths NULL terminated list of paths to add * @param paths NULL terminated list of paths to add
* @return pointer to the new path */ * @return pointer to the new path */
char *rc_strcatpaths (const char *path1, const char *paths, ...) SENTINEL; char *rc_strcatpaths (const char *path1, const char *paths, ...) SENTINEL;
/*! Check if an environment variable matches the given value /*! Check if an environment variable is a boolean and return it's value.
* If variable is not a boolean then we set errno to be ENOENT when it does
* not exist or EINVAL if it's not a boolean.
* @param variable to check * @param variable to check
* @param value it should be * @return true if it matches true, yes or 1, false if otherwise. */
* @return true if it matches */ bool rc_env_bool (const char *variable);
bool rc_is_env (const char *variable, const char *value);
/*! Check if the file exists or not /*! Check if the file exists or not
* @param pathname to check * @param pathname to check
* @return true if it exists, otherwise false */ * @return true if it exists, otherwise false */

View File

@ -562,7 +562,7 @@ static void svc_start (bool deps)
rc_plugin_run (rc_hook_service_start_in, applet); rc_plugin_run (rc_hook_service_start_in, applet);
hook_out = rc_hook_service_start_out; hook_out = rc_hook_service_start_out;
if (rc_is_env ("IN_HOTPLUG", "1") || in_background) { if (rc_env_bool ("IN_HOTPLUG") || in_background) {
if (! rc_service_state (service, rc_service_inactive) && if (! rc_service_state (service, rc_service_inactive) &&
! rc_service_state (service, rc_service_stopped)) ! rc_service_state (service, rc_service_stopped))
exit (EXIT_FAILURE); exit (EXIT_FAILURE);
@ -584,7 +584,7 @@ static void svc_start (bool deps)
make_exclusive (service); make_exclusive (service);
if (rc_is_env ("RC_DEPEND_STRICT", "yes")) if (rc_env_bool ("RC_DEPEND_STRICT"))
depoptions |= RC_DEP_STRICT; depoptions |= RC_DEP_STRICT;
if (rc_runlevel_starting ()) if (rc_runlevel_starting ())
@ -630,7 +630,7 @@ static void svc_start (bool deps)
STRLIST_FOREACH (use_services, svc, i) STRLIST_FOREACH (use_services, svc, i)
if (rc_service_state (svc, rc_service_stopped)) { if (rc_service_state (svc, rc_service_stopped)) {
pid_t pid = rc_start_service (svc); pid_t pid = rc_start_service (svc);
if (! rc_is_env ("RC_PARALLEL", "yes")) if (! rc_env_bool ("RC_PARALLEL"))
rc_waitpid (pid); rc_waitpid (pid);
} }
} }
@ -802,7 +802,7 @@ static void svc_stop (bool deps)
rc_service_state (service, rc_service_failed)) rc_service_state (service, rc_service_failed))
exit (EXIT_FAILURE); exit (EXIT_FAILURE);
if (rc_is_env ("IN_HOTPLUG", "1") || in_background) if (rc_env_bool ("IN_HOTPLUG") || in_background)
if (! rc_service_state (service, rc_service_started) && if (! rc_service_state (service, rc_service_started) &&
! rc_service_state (service, rc_service_inactive)) ! rc_service_state (service, rc_service_inactive))
exit (EXIT_FAILURE); exit (EXIT_FAILURE);
@ -827,7 +827,7 @@ static void svc_stop (bool deps)
char *svc; char *svc;
int i; int i;
if (rc_is_env ("RC_DEPEND_STRICT", "yes")) if (rc_env_bool ("RC_DEPEND_STRICT"))
depoptions |= RC_DEP_STRICT; depoptions |= RC_DEP_STRICT;
if (rc_runlevel_stopping ()) if (rc_runlevel_stopping ())
@ -857,7 +857,7 @@ static void svc_stop (bool deps)
rc_service_state (svc, rc_service_inactive)) rc_service_state (svc, rc_service_inactive))
{ {
pid_t pid = rc_stop_service (svc); pid_t pid = rc_stop_service (svc);
if (! rc_is_env ("RC_PARALLEL", "yes")) if (! rc_env_bool ("RC_PARALLEL"))
rc_waitpid (pid); rc_waitpid (pid);
rc_strlist_add (&tmplist, svc); rc_strlist_add (&tmplist, svc);
} }
@ -1088,7 +1088,7 @@ int runscript (int argc, char **argv)
setenv ("RC_RUNSCRIPT_PID", pid, 1); setenv ("RC_RUNSCRIPT_PID", pid, 1);
/* eprefix is kinda klunky, but it works for our purposes */ /* eprefix is kinda klunky, but it works for our purposes */
if (rc_is_env ("RC_PARALLEL", "yes")) { if (rc_env_bool ("RC_PARALLEL")) {
int l = 0; int l = 0;
int ll; int ll;
@ -1138,13 +1138,13 @@ int runscript (int argc, char **argv)
/* Save the IN_BACKGROUND env flag so it's ONLY passed to the service /* Save the IN_BACKGROUND env flag so it's ONLY passed to the service
that is being called and not any dependents */ that is being called and not any dependents */
if (getenv ("IN_BACKGROUND")) { if (getenv ("IN_BACKGROUND")) {
in_background = rc_is_env ("IN_BACKGROUND", "true"); in_background = rc_env_bool ("IN_BACKGROUND");
ibsave = rc_xstrdup (getenv ("IN_BACKGROUND")); ibsave = rc_xstrdup (getenv ("IN_BACKGROUND"));
unsetenv ("IN_BACKGROUND"); unsetenv ("IN_BACKGROUND");
} }
if (rc_is_env ("IN_HOTPLUG", "1")) { if (rc_env_bool ("IN_HOTPLUG")) {
if (! rc_is_env ("RC_HOTPLUG", "yes") || ! rc_allow_plug (applet)) if (! rc_env_bool ("RC_HOTPLUG") || ! rc_allow_plug (applet))
eerrorx ("%s: not allowed to be hotplugged", applet); eerrorx ("%s: not allowed to be hotplugged", applet);
} }
@ -1196,7 +1196,7 @@ int runscript (int argc, char **argv)
strcmp (optarg, "iprovide") == 0) { strcmp (optarg, "iprovide") == 0) {
int depoptions = RC_DEP_TRACE; int depoptions = RC_DEP_TRACE;
if (rc_is_env ("RC_DEPEND_STRICT", "yes")) if (rc_env_bool ("RC_DEPEND_STRICT"))
depoptions |= RC_DEP_STRICT; depoptions |= RC_DEP_STRICT;
if (! deptree && ((deptree = rc_load_deptree ()) == NULL)) if (! deptree && ((deptree = rc_load_deptree ()) == NULL))

View File

@ -684,7 +684,7 @@ int start_stop_daemon (int argc, char **argv)
case_RC_COMMON_GETOPT case_RC_COMMON_GETOPT
} }
quiet = rc_is_env ("RC_QUIET", "yes"); quiet = rc_env_bool ("RC_QUIET");
verbose = rc_is_env ("RC_VERBOSE", "yes"); verbose = rc_is_env ("RC_VERBOSE", "yes");
/* Allow start-stop-daemon --signal HUP --exec /usr/sbin/dnsmasq /* Allow start-stop-daemon --signal HUP --exec /usr/sbin/dnsmasq