From cb9da6a262b60255cd037f20b4cde3ab2c8a1e6a Mon Sep 17 00:00:00 2001 From: Roy Marples Date: Sun, 16 Mar 2008 17:00:56 +0000 Subject: Remove null terminated char ** lists in favour of RC_STRINGLIST, using TAILQ from queue(3). Refactor code style around the BSD KNF. --- src/includes/rc-misc.h | 73 +++++++++++++++++++++++++++++++++++++------------- src/includes/strlist.h | 48 --------------------------------- 2 files changed, 55 insertions(+), 66 deletions(-) delete mode 100644 src/includes/strlist.h (limited to 'src/includes') diff --git a/src/includes/rc-misc.h b/src/includes/rc-misc.h index fafbc49..0b33c99 100644 --- a/src/includes/rc-misc.h +++ b/src/includes/rc-misc.h @@ -56,7 +56,7 @@ #define RC_LIBDIR RC_PREFIX "/" LIB "/rc" #define RC_SVCDIR RC_LIBDIR "/init.d" -#define RC_DEPTREE RC_SVCDIR "/deptree" +#define RC_DEPTREE_CACHE RC_SVCDIR "/deptree" #define RC_RUNLEVELDIR RC_PREFIX SYSCONFDIR "/runlevels" #define RC_INITDIR RC_PREFIX SYSCONFDIR "/init.d" #define RC_CONFDIR RC_PREFIX SYSCONFDIR "/conf.d" @@ -98,9 +98,46 @@ # define _unused #endif + +/* Some libc implemntations don't have these */ +#ifndef STAILQ_CONCAT +#define STAILQ_CONCAT(head1, head2) do { \ + if (!STAILQ_EMPTY((head2))) { \ + *(head1)->stqh_last = (head2)->stqh_first; \ + (head1)->stqh_last = (head2)->stqh_last; \ + STAILQ_INIT((head2)); \ + } \ +} while (0) +#endif + +#ifndef TAILQ_CONCAT +#define TAILQ_CONCAT(head1, head2) do { \ + if (!TAILQ_EMPTY((head2))) { \ + *(head1)->tqh_last = (head2)->tqh_first; \ + (head1)->tqh_last = (head2)->tqh_last; \ + TAILQ_INIT((head2)); \ + } \ +} while (0) +#endif + +#ifndef STAILQ_FOREACH_SAFE +#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = STAILQ_FIRST((head)); \ + (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) +#endif + +#ifndef TAILQ_FOREACH_SAFE +#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = TAILQ_FIRST((head)); \ + (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ + (var) = (tvar)) +#endif + + _unused static void *xmalloc (size_t size) { - void *value = malloc (size); + void *value = malloc(size); if (value) return (value); @@ -109,9 +146,9 @@ _unused static void *xmalloc (size_t size) /* NOTREACHED */ } -_unused static void *xrealloc (void *ptr, size_t size) +_unused static void *xrealloc(void *ptr, size_t size) { - void *value = realloc (ptr, size); + void *value = realloc(ptr, size); if (value) return (value); @@ -120,14 +157,14 @@ _unused static void *xrealloc (void *ptr, size_t size) /* NOTREACHED */ } -_unused static char *xstrdup (const char *str) +_unused static char *xstrdup(const char *str) { char *value; if (! str) return (NULL); - value = strdup (str); + value = strdup(str); if (value) return (value); @@ -138,32 +175,32 @@ _unused static char *xstrdup (const char *str) #undef ERRX -_unused static bool exists (const char *pathname) +_unused static bool exists(const char *pathname) { struct stat buf; - return (stat (pathname, &buf) == 0); + return (stat(pathname, &buf) == 0); } -_unused static bool existss (const char *pathname) +_unused static bool existss(const char *pathname) { struct stat buf; - return (stat (pathname, &buf) == 0 && buf.st_size != 0); + return (stat(pathname, &buf) == 0 && buf.st_size != 0); } -char *rc_conf_value (const char *var); -bool rc_conf_yesno (const char *var); -char **env_filter (void); -char **env_config (void); -bool service_plugable (const char *service); -int signal_setup (int sig, void (*handler)(int)); +char *rc_conf_value(const char *var); +bool rc_conf_yesno(const char *var); +void env_filter(void); +void env_config(void); +bool service_plugable(const char *service); +int signal_setup(int sig, void (*handler)(int)); /* basename_c never modifies the argument. As such, if there is a trailing * slash then an empty string is returned. */ -_unused static const char *basename_c (const char *path) +_unused static const char *basename_c(const char *path) { - const char *slash = strrchr (path, '/'); + const char *slash = strrchr(path, '/'); if (slash) return (++slash); diff --git a/src/includes/strlist.h b/src/includes/strlist.h deleted file mode 100644 index ff4c4ed..0000000 --- a/src/includes/strlist.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - strlist.h - String list macros for making char ** arrays - Based on a previous implementation by Martin Schlemmer - */ - -/* - * Copyright 2007-2008 Roy Marples - * All rights reserved - - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef __STRLIST_H__ -#define __STRLIST_H__ - -/* FIXME: We should replace the macro with an rc_strlist_foreach - function, but I'm unsure how to go about this. */ - -/* Step through each entry in the string list, setting '_pos' to the - beginning of the entry. '_counter' is used by the macro as index, - but should not be used by code as index (or if really needed, then - it should usually by +1 from what you expect, and should only be - used in the scope of the macro) */ -#define STRLIST_FOREACH(_list, _pos, _counter) \ - if ((_list) && _list[0] && ! (_counter = 0)) \ - while ((_pos = _list[_counter++])) - -#endif /* __STRLIST_H__ */ -- cgit v1.2.3