stringlist routines are now public (ftp uses them)
authormillert <millert@openbsd.org>
Sun, 2 Feb 1997 23:27:52 +0000 (23:27 +0000)
committermillert <millert@openbsd.org>
Sun, 2 Feb 1997 23:27:52 +0000 (23:27 +0000)
lib/libc/gen/Makefile.inc
lib/libc/gen/getnetgrent.c
lib/libc/gen/stringlist.c [new file with mode: 0644]

index 98edb86..3a352bf 100644 (file)
@@ -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 \
index 661f457..137f9bb 100644 (file)
@@ -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 *,
@@ -77,79 +75,6 @@ static char          *in_lookup1 __P((const char *, const char *,
 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 (file)
index 0000000..372ecad
--- /dev/null
@@ -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);
+}