summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTodd C. Miller <millert@cvs.openbsd.org>1997-02-02 23:27:54 +0000
committerTodd C. Miller <millert@cvs.openbsd.org>1997-02-02 23:27:54 +0000
commit1bc6ca1b97192ff24f1049b3092ccab10171821e (patch)
tree810ec7ef67574eff508e8acb096f10b33e99a24d
parent1ed74b9eea84e41c5300e91d5a79fa3965bd1d3d (diff)
stringlist routines are now public (ftp uses them)
-rw-r--r--lib/libc/gen/Makefile.inc12
-rw-r--r--lib/libc/gen/getnetgrent.c135
-rw-r--r--lib/libc/gen/stringlist.c121
3 files changed, 157 insertions, 111 deletions
diff --git a/lib/libc/gen/Makefile.inc b/lib/libc/gen/Makefile.inc
index 98edb860442..3a352bf015d 100644
--- a/lib/libc/gen/Makefile.inc
+++ b/lib/libc/gen/Makefile.inc
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.inc,v 1.7 1996/09/15 23:16:13 tholo Exp $
+# $OpenBSD: Makefile.inc,v 1.8 1997/02/02 23:27:53 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 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 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
# 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 661f457b4fe..137f9bbd616 100644
--- a/lib/libc/gen/getnetgrent.c
+++ b/lib/libc/gen/getnetgrent.c
@@ -1,3 +1,6 @@
+/* $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 $ */
+
/*
* Copyright (c) 1994 Christos Zoulas
* All rights reserved.
@@ -30,7 +33,7 @@
*/
#if defined(LIBC_SCCS) && !defined(lint)
-static char *rcsid = "$OpenBSD: getnetgrent.c,v 1.3 1996/08/19 08:23:49 tholo Exp $";
+static char *rcsid = "$OpenBSD: getnetgrent.c,v 1.4 1997/02/02 23:27:52 millert Exp $";
#endif /* LIBC_SCCS and not lint */
#include <sys/types.h>
@@ -42,7 +45,11 @@ static char *rcsid = "$OpenBSD: getnetgrent.c,v 1.3 1996/08/19 08:23:49 tholo Ex
#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)
@@ -54,22 +61,13 @@ 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 *, struct stringlist *, char *));
+static void addgroup __P((char *, StringList *, char *));
static int in_check __P((const char *, const char *,
const char *, struct netgroup *));
-static int in_find __P((char *, struct stringlist *,
+static int in_find __P((char *, StringList *,
char *, const char *,
const char *, const char *));
static char *in_lookup1 __P((const char *, const char *,
@@ -78,79 +76,6 @@ 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
*/
@@ -367,9 +292,9 @@ _ng_parse(p, name, ng)
*/
static void
addgroup(ypdom, sl, grp)
- char *ypdom;
- struct stringlist *sl;
- char *grp;
+ char *ypdom;
+ StringList *sl;
+ char *grp;
{
char *line, *p;
struct netgroup *ng;
@@ -379,12 +304,12 @@ addgroup(ypdom, sl, grp)
(void) fprintf(stderr, "addgroup(%s)\n", grp);
#endif
/* check for cycles */
- if (_ng_sl_find(sl, grp) != NULL) {
+ if (sl_find(sl, grp) != NULL) {
free(grp);
_warnx("netgroup: Cycle in group `%s'", grp);
return;
}
- _ng_sl_add(sl, grp);
+ sl_add(sl, grp);
/* Lookup this netgroup */
if (!lookup(ypdom, grp, &line, _NG_KEYBYNAME))
@@ -453,12 +378,12 @@ in_check(host, user, domain, ng)
*/
static int
in_find(ypdom, sl, grp, host, user, domain)
- char *ypdom;
- struct stringlist *sl;
- char *grp;
- const char *host;
- const char *user;
- const char *domain;
+ char *ypdom;
+ StringList *sl;
+ char *grp;
+ const char *host;
+ const char *user;
+ const char *domain;
{
char *line, *p;
int i;
@@ -469,12 +394,12 @@ in_find(ypdom, sl, grp, host, user, domain)
(void) fprintf(stderr, "in_find(%s)\n", grp);
#endif
/* check for cycles */
- if (_ng_sl_find(sl, grp) != NULL) {
+ if (sl_find(sl, grp) != NULL) {
free(grp);
_warnx("netgroup: Cycle in group `%s'", grp);
return 0;
}
- _ng_sl_add(sl, grp);
+ sl_add(sl, grp);
/* Lookup this netgroup */
if (!lookup(ypdom, grp, &line, _NG_KEYBYNAME))
@@ -649,11 +574,11 @@ void
setnetgrent(ng)
const char *ng;
{
- struct stringlist *sl = _ng_sl_init();
+ StringList *sl = 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)
@@ -677,7 +602,7 @@ setnetgrent(ng)
_err(1, _ngoomem);
addgroup(ypdom, sl, ng_copy);
_nghead = _nglist;
- _ng_sl_free(sl, 1);
+ sl_free(sl, 1);
}
@@ -709,7 +634,7 @@ innetgr(grp, host, user, domain)
char *line;
#endif
int found;
- struct stringlist *sl;
+ StringList *sl;
if (_ng_db == NULL)
_ng_db = dbopen(_PATH_NETGROUP_DB, O_RDONLY, 0, DB_HASH, NULL);
@@ -740,9 +665,9 @@ innetgr(grp, host, user, domain)
return 0;
/* Too bad need the slow recursive way */
- sl = _ng_sl_init();
+ sl = sl_init();
found = in_find(ypdom, sl, strdup(grp), host, user, domain);
- _ng_sl_free(sl, 1);
+ sl_free(sl, 1);
return found;
}
diff --git a/lib/libc/gen/stringlist.c b/lib/libc/gen/stringlist.c
new file mode 100644
index 00000000000..372ecad8fb2
--- /dev/null
+++ b/lib/libc/gen/stringlist.c
@@ -0,0 +1,121 @@
+/* $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);
+}