diff options
author | Todd C. Miller <millert@cvs.openbsd.org> | 1997-02-03 00:10:10 +0000 |
---|---|---|
committer | Todd C. Miller <millert@cvs.openbsd.org> | 1997-02-03 00:10:10 +0000 |
commit | fe9cab4ae0ab1c93d39792ef327f98d7276cc1ff (patch) | |
tree | 8ad833a16f3d614517ef28d74cbc800823ff5ae2 /lib/libc/gen | |
parent | 5ee8dec3be3bc0f1dc9bb23552af707bd1aa7b83 (diff) |
Back out stringlist
Diffstat (limited to 'lib/libc/gen')
-rw-r--r-- | lib/libc/gen/Makefile.inc | 12 | ||||
-rw-r--r-- | lib/libc/gen/getnetgrent.c | 135 | ||||
-rw-r--r-- | lib/libc/gen/stringlist.c | 121 |
3 files changed, 112 insertions, 156 deletions
diff --git a/lib/libc/gen/Makefile.inc b/lib/libc/gen/Makefile.inc index 3a352bf015d..93c71eccb9b 100644 --- a/lib/libc/gen/Makefile.inc +++ b/lib/libc/gen/Makefile.inc @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile.inc,v 1.8 1997/02/02 23:27:53 millert Exp $ +# $OpenBSD: Makefile.inc,v 1.9 1997/02/03 00:10:08 millert Exp $ # gen sources .PATH: ${.CURDIR}/arch/${MACHINE_ARCH}/gen ${.CURDIR}/gen @@ -13,11 +13,11 @@ SRCS+= alarm.c assert.c clock.c closedir.c confstr.c ctermid.c \ nice.c nlist.c opendir.c pause.c popen.c psignal.c pwcache.c raise.c \ readdir.c rewinddir.c scandir.c seekdir.c setdomainname.c \ sethostname.c setjmperr.c setmode.c setproctitle.c siginterrupt.c \ - siglist.c signal.c signame.c sigsetops.c sleep.c stringlist.c \ - sysconf.c sysctl.c syslog.c telldir.c time.c times.c timezone.c \ - tolower_.c ttyname.c ttyslot.c toupper_.c ualarm.c uname.c unvis.c \ - usleep.c utime.c valloc.c vis.c wait.c wait3.c waitpid.c warn.c \ - warnx.c vwarn.c vwarnx.c verr.c verrx.c + siglist.c signal.c signame.c sigsetops.c sleep.c sysconf.c sysctl.c \ + syslog.c telldir.c time.c times.c timezone.c tolower_.c ttyname.c \ + ttyslot.c toupper_.c ualarm.c uname.c unvis.c usleep.c utime.c \ + valloc.c vis.c wait.c wait3.c waitpid.c warn.c warnx.c vwarn.c \ + vwarnx.c verr.c verrx.c # indirect reference stubs, to be removed soon. SRCS+= _err.c _errx.c _sys_errlist.c _sys_nerr.c _sys_siglist.c \ diff --git a/lib/libc/gen/getnetgrent.c b/lib/libc/gen/getnetgrent.c index 137f9bbd616..91675c0e4e5 100644 --- a/lib/libc/gen/getnetgrent.c +++ b/lib/libc/gen/getnetgrent.c @@ -1,5 +1,4 @@ -/* $OpenBSD: getnetgrent.c,v 1.4 1997/02/02 23:27:52 millert Exp $ */ -/* $NetBSD: getnetgrent.c,v 1.11 1997/01/17 07:26:19 lukem Exp $ */ +/* $OpenBSD: getnetgrent.c,v 1.5 1997/02/03 00:10:08 millert Exp $ */ /* * Copyright (c) 1994 Christos Zoulas @@ -33,7 +32,7 @@ */ #if defined(LIBC_SCCS) && !defined(lint) -static char *rcsid = "$OpenBSD: getnetgrent.c,v 1.4 1997/02/02 23:27:52 millert Exp $"; +static char *rcsid = "$OpenBSD: getnetgrent.c,v 1.5 1997/02/03 00:10:08 millert Exp $"; #endif /* LIBC_SCCS and not lint */ #include <sys/types.h> @@ -45,11 +44,7 @@ static char *rcsid = "$OpenBSD: getnetgrent.c,v 1.4 1997/02/02 23:27:52 millert #include <err.h> #include <ctype.h> #include <stdlib.h> -#include <stringlist.h> #include <db.h> -#ifdef YP -#include <rpcsvc/ypclnt.h> -#endif #define _NG_STAR(s) (((s) == NULL || *(s) == '\0') ? _ngstar : s) #define _NG_EMPTY(s) ((s) == NULL ? "" : s) @@ -61,13 +56,22 @@ static struct netgroup *_nghead = (struct netgroup *)NULL; static struct netgroup *_nglist = (struct netgroup *)NULL; static DB *_ng_db; +/* + * Simple string list + */ +struct stringlist { + char **sl_str; + size_t sl_max; + size_t sl_cur; +}; + static int getstring __P((char **, int, char **)); static struct netgroup *getnetgroup __P((char **)); static int lookup __P((const char *, char *, char **, int)); -static void addgroup __P((char *, StringList *, char *)); +static void addgroup __P((char *, struct stringlist *, char *)); static int in_check __P((const char *, const char *, const char *, struct netgroup *)); -static int in_find __P((char *, StringList *, +static int in_find __P((char *, struct stringlist *, char *, const char *, const char *, const char *)); static char *in_lookup1 __P((const char *, const char *, @@ -76,6 +80,79 @@ static int in_lookup __P((const char *, const char *, const char *, const char *, int)); /* + * _ng_sl_init(): Initialize a string list + */ +struct stringlist * +_ng_sl_init() +{ + struct stringlist *sl = malloc(sizeof(struct stringlist)); + if (sl == NULL) + _err(1, _ngoomem); + + sl->sl_cur = 0; + sl->sl_max = 20; + sl->sl_str = malloc(sl->sl_max * sizeof(char *)); + if (sl->sl_str == NULL) + _err(1, _ngoomem); + return sl; +} + + +/* + * _ng_sl_add(): Add an item to the string list + */ +void +_ng_sl_add(sl, name) + struct stringlist *sl; + char *name; +{ + if (sl->sl_cur == sl->sl_max - 1) { + sl->sl_max += 20; + sl->sl_str = realloc(sl->sl_str, sl->sl_max * sizeof(char *)); + if (sl->sl_str == NULL) + _err(1, _ngoomem); + } + sl->sl_str[sl->sl_cur++] = name; +} + + +/* + * _ng_sl_free(): Free a stringlist + */ +void +_ng_sl_free(sl, all) + struct stringlist *sl; + int all; +{ + size_t i; + + if (all) + for (i = 0; i < sl->sl_cur; i++) + free(sl->sl_str[i]); + free(sl->sl_str); + free(sl); +} + + +/* + * sl_find(): Find a name in the string list + */ +char * +_ng_sl_find(sl, name) + struct stringlist *sl; + char *name; +{ + size_t i; + + for (i = 0; i < sl->sl_cur; i++) + if (strcmp(sl->sl_str[i], name) == 0) + return sl->sl_str[i]; + + return NULL; +} + + +/* * getstring(): Get a string delimited by the character, skipping leading and * trailing blanks and advancing the pointer */ @@ -292,9 +369,9 @@ _ng_parse(p, name, ng) */ static void addgroup(ypdom, sl, grp) - char *ypdom; - StringList *sl; - char *grp; + char *ypdom; + struct stringlist *sl; + char *grp; { char *line, *p; struct netgroup *ng; @@ -304,12 +381,12 @@ addgroup(ypdom, sl, grp) (void) fprintf(stderr, "addgroup(%s)\n", grp); #endif /* check for cycles */ - if (sl_find(sl, grp) != NULL) { + if (_ng_sl_find(sl, grp) != NULL) { free(grp); _warnx("netgroup: Cycle in group `%s'", grp); return; } - sl_add(sl, grp); + _ng_sl_add(sl, grp); /* Lookup this netgroup */ if (!lookup(ypdom, grp, &line, _NG_KEYBYNAME)) @@ -378,12 +455,12 @@ in_check(host, user, domain, ng) */ static int in_find(ypdom, sl, grp, host, user, domain) - char *ypdom; - StringList *sl; - char *grp; - const char *host; - const char *user; - const char *domain; + char *ypdom; + struct stringlist *sl; + char *grp; + const char *host; + const char *user; + const char *domain; { char *line, *p; int i; @@ -394,12 +471,12 @@ in_find(ypdom, sl, grp, host, user, domain) (void) fprintf(stderr, "in_find(%s)\n", grp); #endif /* check for cycles */ - if (sl_find(sl, grp) != NULL) { + if (_ng_sl_find(sl, grp) != NULL) { free(grp); _warnx("netgroup: Cycle in group `%s'", grp); return 0; } - sl_add(sl, grp); + _ng_sl_add(sl, grp); /* Lookup this netgroup */ if (!lookup(ypdom, grp, &line, _NG_KEYBYNAME)) @@ -574,11 +651,11 @@ void setnetgrent(ng) const char *ng; { - StringList *sl = sl_init(); + struct stringlist *sl = _ng_sl_init(); #ifdef YP - char *line; + char *line; #endif - char *ng_copy, *ypdom = NULL; + char *ng_copy, *ypdom = NULL; /* Cleanup any previous storage */ if (_nghead != NULL) @@ -602,7 +679,7 @@ setnetgrent(ng) _err(1, _ngoomem); addgroup(ypdom, sl, ng_copy); _nghead = _nglist; - sl_free(sl, 1); + _ng_sl_free(sl, 1); } @@ -634,7 +711,7 @@ innetgr(grp, host, user, domain) char *line; #endif int found; - StringList *sl; + struct stringlist *sl; if (_ng_db == NULL) _ng_db = dbopen(_PATH_NETGROUP_DB, O_RDONLY, 0, DB_HASH, NULL); @@ -665,9 +742,9 @@ innetgr(grp, host, user, domain) return 0; /* Too bad need the slow recursive way */ - sl = sl_init(); + sl = _ng_sl_init(); found = in_find(ypdom, sl, strdup(grp), host, user, domain); - sl_free(sl, 1); + _ng_sl_free(sl, 1); return found; } diff --git a/lib/libc/gen/stringlist.c b/lib/libc/gen/stringlist.c deleted file mode 100644 index 372ecad8fb2..00000000000 --- a/lib/libc/gen/stringlist.c +++ /dev/null @@ -1,121 +0,0 @@ -/* $OpenBSD: stringlist.c,v 1.1 1997/02/02 23:27:53 millert Exp $ */ -/* $NetBSD: stringlist.c,v 1.2 1997/01/17 07:26:20 lukem Exp $ */ - -/* - * Copyright (c) 1994 Christos Zoulas - * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Christos Zoulas. - * 4. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -static char *rcsid = "$NetBSD: stringlist.c,v 1.2 1997/01/17 07:26:20 lukem Exp $"; -#endif /* LIBC_SCCS and not lint */ - -#include <stdio.h> -#include <string.h> -#include <err.h> -#include <stdlib.h> -#include <stringlist.h> - -#define _SL_CHUNKSIZE 20 - -/* - * sl_init(): Initialize a string list - */ -StringList * -sl_init() -{ - StringList *sl = malloc(sizeof(StringList)); - if (sl == NULL) - _err(1, "stringlist: %m"); - - sl->sl_cur = 0; - sl->sl_max = _SL_CHUNKSIZE; - sl->sl_str = malloc(sl->sl_max * sizeof(char *)); - if (sl->sl_str == NULL) - _err(1, "stringlist: %m"); - return (sl); -} - - -/* - * sl_add(): Add an item to the string list - */ -void -sl_add(sl, name) - StringList *sl; - char *name; -{ - if (sl->sl_cur == sl->sl_max - 1) { - sl->sl_max += _SL_CHUNKSIZE; - sl->sl_str = realloc(sl->sl_str, sl->sl_max * sizeof(char *)); - if (sl->sl_str == NULL) - _err(1, "stringlist: %m"); - } - sl->sl_str[sl->sl_cur++] = name; -} - - -/* - * sl_free(): Free a stringlist - */ -void -sl_free(sl, all) - StringList *sl; - int all; -{ - size_t i; - - if (sl == NULL) - return; - if (sl->sl_str) { - if (all) - for (i = 0; i < sl->sl_cur; i++) - free(sl->sl_str[i]); - free(sl->sl_str); - } - free(sl); -} - - -/* - * sl_find(): Find a name in the string list - */ -char * -sl_find(sl, name) - StringList *sl; - char *name; -{ - size_t i; - - for (i = 0; i < sl->sl_cur; i++) - if (strcmp(sl->sl_str[i], name) == 0) - return (sl->sl_str[i]); - - return (NULL); -} |