Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/netbsd-1-6]: src/usr.bin/man Pull up revision 1.1 (new, requested by tho...
details: https://anonhg.NetBSD.org/src/rev/5ae22c76aac7
branches: netbsd-1-6
changeset: 529248:5ae22c76aac7
user: he <he%NetBSD.org@localhost>
date: Sun Nov 03 13:47:55 2002 +0000
description:
Pull up revision 1.1 (new, requested by thorpej in ticket #787):
Rename man/config.{c,h} to man/manconf.{c,h}, so we do not
have to worry about problems including "config.h" when
building as a host tool.
diffstat:
usr.bin/man/manconf.c | 227 ++++++++++++++++++++++++++++++++++++++++++++++++++
usr.bin/man/manconf.h | 63 +++++++++++++
2 files changed, 290 insertions(+), 0 deletions(-)
diffs (298 lines):
diff -r fb71af44009f -r 5ae22c76aac7 usr.bin/man/manconf.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.bin/man/manconf.c Sun Nov 03 13:47:55 2002 +0000
@@ -0,0 +1,227 @@
+/* $NetBSD: manconf.c,v 1.2.2.2 2002/11/03 13:47:55 he Exp $ */
+
+/*
+ * Copyright (c) 1989, 1993, 1995
+ * The Regents of the University of California. 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 the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)config.c 8.8 (Berkeley) 1/31/95";
+#else
+#if defined(__RCSID)
+__RCSID("$NetBSD: manconf.c,v 1.2.2.2 2002/11/03 13:47:55 he Exp $");
+#endif
+#endif
+#endif /* not lint */
+
+#include <sys/types.h>
+#include <sys/queue.h>
+
+#include <ctype.h>
+#include <err.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "manconf.h"
+#include "pathnames.h"
+
+struct _head head;
+
+/*
+ * config --
+ *
+ * Read the configuration file and build a doubly linked
+ * list that looks like:
+ *
+ * tag1 <-> record <-> record <-> record
+ * |
+ * tag2 <-> record <-> record <-> record
+ */
+void
+config(fname)
+ const char *fname;
+{
+ TAG *tp;
+ FILE *cfp;
+ size_t len;
+ int lcnt;
+ char *p, *t, type;
+
+ if (fname == NULL)
+ fname = _PATH_MANCONF;
+ if ((cfp = fopen(fname, "r")) == NULL)
+ err(1, "%s", fname);
+ TAILQ_INIT(&head);
+ for (lcnt = 1; (p = fgetln(cfp, &len)) != NULL; ++lcnt) {
+ if (len == 1) /* Skip empty lines. */
+ continue;
+ if (p[len - 1] != '\n') { /* Skip corrupted lines. */
+ warnx("%s: line %d corrupted", fname, lcnt);
+ continue;
+ }
+ p[len - 1] = '\0'; /* Terminate the line. */
+
+ /* Skip leading space. */
+ for (; *p != '\0' && isspace((unsigned char)*p); ++p);
+ /* Skip empty/comment lines. */
+ if (*p == '\0' || *p == '#')
+ continue;
+ /* Find first token. */
+ for (t = p; *t && !isspace((unsigned char)*t); ++t);
+ if (*t == '\0') /* Need more than one token.*/
+ continue;
+ *t = '\0';
+
+ tp = getlist(p, 1);
+
+ /*
+ * Attach new records. Check to see if it is a
+ * section record or not.
+ */
+
+ if (*p == '_') { /* not a section record */
+ /*
+ * Special cases: _build and _crunch take the
+ * rest of the line as a single entry.
+ */
+ if (!strcmp(p, "_build") || !strcmp(p, "_crunch")) {
+ /*
+ * The reason we're not just using
+ * strtok(3) for all of the parsing is
+ * so we don't get caught if a line
+ * has only a single token on it.
+ */
+ while (*++t && isspace((unsigned char)*t));
+ addentry(tp, t, 0);
+ } else {
+ for(++t; (p = strtok(t, " \t\n")) != NULL;
+ t = NULL)
+ addentry(tp, p, 0);
+ }
+
+ } else { /* section record */
+
+ /*
+ * section entries can either be all absolute
+ * paths or all relative paths, but not both.
+ */
+ type = (TAILQ_FIRST(&tp->list) != NULL) ?
+ *(TAILQ_FIRST(&tp->list)->s) : 0;
+
+ for (++t; (p = strtok(t, " \t\n")) != NULL; t = NULL) {
+
+ /* ensure an assigned type */
+ if (type == 0)
+ type = *p;
+
+ /* check for illegal mix */
+ if (*p != type) {
+ warnx("section %s: %s: invalid entry, does not match previous types",
+ tp->s, p);
+ warnx("man.conf cannot mix absolute and relative paths in an entry");
+ continue;
+ }
+ addentry(tp, p, 0);
+ }
+ }
+ }
+
+ fclose(cfp);
+}
+
+/*
+ * getlist --
+ * Return the linked list of entries for a tag if it exists.
+ * If it doesn't exist and create is non zero, create new tag
+ * and return that, otherwise return NULL.
+ */
+TAG *
+getlist(name, create)
+ const char *name;
+ int create;
+{
+ TAG *tp;
+
+ TAILQ_FOREACH(tp, &head, q)
+ if (!strcmp(name, tp->s))
+ return (tp);
+ if (create) {
+ if ((tp = malloc(sizeof(TAG))) == NULL ||
+ (tp->s = strdup(name)) == NULL)
+ err(1, "malloc");
+ TAILQ_INIT(&tp->list);
+ TAILQ_INSERT_TAIL(&head, tp, q);
+ return (tp);
+ } else
+ return (NULL);
+}
+
+/*
+ * addentry --
+ * add an entry to a list.
+ */
+void
+addentry(tp, newent, head)
+ TAG *tp;
+ const char *newent;
+ int head;
+{
+ ENTRY *ep;
+
+ if ((ep = malloc(sizeof(*ep))) == NULL ||
+ (ep->s = strdup(newent)) == NULL)
+ err(1, "malloc");
+ if (head)
+ TAILQ_INSERT_HEAD(&tp->list, ep, q);
+ else
+ TAILQ_INSERT_TAIL(&tp->list, ep, q);
+}
+
+#ifdef MANDEBUG
+void
+debug(l)
+ const char *l;
+{
+ TAG *tp;
+ ENTRY *ep;
+
+ (void)printf("%s ===============\n", l);
+ TAILQ_FOREACH(tp, &head, q) {
+ printf("%s\n", tp->s);
+ TAILQ_FOREACH(ep, &tp->list, q)
+ printf("\t%s\n", ep->s);
+ }
+}
+#endif
diff -r fb71af44009f -r 5ae22c76aac7 usr.bin/man/manconf.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.bin/man/manconf.h Sun Nov 03 13:47:55 2002 +0000
@@ -0,0 +1,63 @@
+/* $NetBSD: manconf.h,v 1.1.2.2 2002/11/03 13:47:55 he Exp $ */
+
+/*-
+ * Copyright (c) 1993
+ * The Regents of the University of California.
+ * 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 the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
+ *
+ * @(#)config.h 8.4 (Berkeley) 12/18/93
+ */
+
+typedef struct _tag {
+ TAILQ_ENTRY(_tag) q; /* Queue of tags. */
+
+ TAILQ_HEAD(tqh, _entry) list; /* Queue of entries. */
+ char *s; /* Associated string. */
+ size_t len; /* Length of 's'. */
+} TAG;
+typedef struct _entry {
+ TAILQ_ENTRY(_entry) q; /* Queue of entries. */
+
+ char *s; /* Associated string. */
+ size_t len; /* Length of 's'. */
+} ENTRY;
+
+TAILQ_HEAD(_head, _tag);
+extern struct _head head;
+
+void addentry __P((TAG *, const char *, int));
+void config __P((const char *));
+#ifdef MANDEBUG
+void debug __P((const char *));
+#endif
+TAG *getlist __P((const char *, int));
+void removelist __P((const char *));
+TAG *renamelist __P((const char *, const char *));
Home |
Main Index |
Thread Index |
Old Index