Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/thorpej_scsipi]: src/usr.sbin/config More format string cleanups by somm...
details: https://anonhg.NetBSD.org/src/rev/d3c7318e61ef
branches: thorpej_scsipi
changeset: 477319:d3c7318e61ef
user: is <is%NetBSD.org@localhost>
date: Wed Oct 11 20:23:51 2000 +0000
description:
More format string cleanups by sommerfeld.
diffstat:
usr.sbin/config/util.c | 319 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 319 insertions(+), 0 deletions(-)
diffs (truncated from 323 to 300 lines):
diff -r 526958c7437a -r d3c7318e61ef usr.sbin/config/util.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.sbin/config/util.c Wed Oct 11 20:23:51 2000 +0000
@@ -0,0 +1,319 @@
+/* $NetBSD: util.c,v 1.14.2.2 2000/10/11 20:23:51 is Exp $ */
+
+/*
+ * Copyright (c) 1992, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * This software was developed by the Computer Systems Engineering group
+ * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
+ * contributed to Berkeley.
+ *
+ * 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, Lawrence Berkeley Laboratories.
+ *
+ * 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.
+ *
+ * from: @(#)util.c 8.1 (Berkeley) 6/6/93
+ */
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+#include <sys/types.h>
+#include "config.h"
+
+static void nomem(void);
+static void vxerror(const char *, int, const char *, va_list)
+ __attribute__((__format__(__printf__, 3, 0)));
+static void vxwarn(const char *, int, const char *, va_list)
+ __attribute__((__format__(__printf__, 3, 0)));
+static void vxmsg(const char *fname, int line, const char *class,
+ const char *fmt, va_list)
+ __attribute__((__format__(__printf__, 4, 0)));
+
+/*
+ * Malloc, with abort on error.
+ */
+void *
+emalloc(size_t size)
+{
+ void *p;
+
+ if ((p = malloc(size)) == NULL)
+ nomem();
+ return (p);
+}
+
+/*
+ * Realloc, with abort on error.
+ */
+void *
+erealloc(void *p, size_t size)
+{
+
+ if ((p = realloc(p, size)) == NULL)
+ nomem();
+ return (p);
+}
+
+/*
+ * Strdup, with abort on error.
+ */
+char *
+estrdup(const char *p)
+{
+ char *cp;
+
+ if ((cp = strdup(p)) == NULL)
+ nomem();
+ return (cp);
+}
+
+static void
+nomem(void)
+{
+
+ (void)fprintf(stderr, "config: out of memory\n");
+ exit(1);
+}
+
+/*
+ * Push a prefix onto the prefix stack.
+ */
+void
+prefix_push(const char *path)
+{
+ struct prefix *pf;
+ char *cp;
+
+ pf = emalloc(sizeof(struct prefix));
+
+ if (prefixes != NULL && *path != '/') {
+ cp = emalloc(strlen(prefixes->pf_prefix) + 1 +
+ strlen(path) + 1);
+ (void) sprintf(cp, "%s/%s", prefixes->pf_prefix, path);
+ pf->pf_prefix = intern(cp);
+ free(cp);
+ } else
+ pf->pf_prefix = intern(path);
+
+ pf->pf_next = prefixes;
+ prefixes = pf;
+}
+
+/*
+ * Pop a prefix off the prefix stack.
+ */
+void
+prefix_pop(void)
+{
+ struct prefix *pf;
+
+ if ((pf = prefixes) == NULL) {
+ error("no prefixes on the stack to pop");
+ return;
+ }
+
+ prefixes = pf->pf_next;
+
+ /* Remember this prefix for emitting -I... directives later. */
+ pf->pf_next = allprefixes;
+ allprefixes = pf;
+}
+
+/*
+ * Prepend the source path to a file name.
+ */
+char *
+sourcepath(const char *file)
+{
+ size_t len;
+ char *cp;
+
+ if (prefixes != NULL && *prefixes->pf_prefix == '/')
+ len = strlen(prefixes->pf_prefix) + 1 + strlen(file) + 1;
+ else {
+ len = strlen(srcdir) + 1 + strlen(file) + 1;
+ if (prefixes != NULL)
+ len += strlen(prefixes->pf_prefix) + 1;
+ }
+
+ cp = emalloc(len);
+
+ if (prefixes != NULL) {
+ if (*prefixes->pf_prefix == '/')
+ (void) sprintf(cp, "%s/%s", prefixes->pf_prefix, file);
+ else
+ (void) sprintf(cp, "%s/%s/%s", srcdir,
+ prefixes->pf_prefix, file);
+ } else
+ (void) sprintf(cp, "%s/%s", srcdir, file);
+ return (cp);
+}
+
+static struct nvlist *nvhead;
+
+struct nvlist *
+newnv(const char *name, const char *str, void *ptr, int i, struct nvlist *next)
+{
+ struct nvlist *nv;
+
+ if ((nv = nvhead) == NULL)
+ nv = emalloc(sizeof(*nv));
+ else
+ nvhead = nv->nv_next;
+ nv->nv_next = next;
+ nv->nv_name = name;
+ if (ptr == NULL)
+ nv->nv_str = str;
+ else {
+ if (str != NULL)
+ panic("newnv");
+ nv->nv_ptr = ptr;
+ }
+ nv->nv_int = i;
+ return (nv);
+}
+
+/*
+ * Free an nvlist structure (just one).
+ */
+void
+nvfree(struct nvlist *nv)
+{
+
+ nv->nv_next = nvhead;
+ nvhead = nv;
+}
+
+/*
+ * Free an nvlist (the whole list).
+ */
+void
+nvfreel(struct nvlist *nv)
+{
+ struct nvlist *next;
+
+ for (; nv != NULL; nv = next) {
+ next = nv->nv_next;
+ nv->nv_next = nvhead;
+ nvhead = nv;
+ }
+}
+
+void
+warn(const char *fmt, ...)
+{
+ va_list ap;
+ extern const char *yyfile;
+
+ va_start(ap, fmt);
+ vxwarn(yyfile, currentline(), fmt, ap);
+ va_end(ap);
+}
+
+
+static void
+vxwarn(const char *file, int line, const char *fmt, va_list ap)
+{
+ vxmsg(file, line, "warning: ", fmt, ap);
+}
+
+/*
+ * External (config file) error. Complain, using current file
+ * and line number.
+ */
+void
+error(const char *fmt, ...)
+{
+ va_list ap;
+ extern const char *yyfile;
+
+ va_start(ap, fmt);
+ vxerror(yyfile, currentline(), fmt, ap);
+ va_end(ap);
+}
+
+/*
+ * Delayed config file error (i.e., something was wrong but we could not
+ * find out about it until later).
+ */
+void
+xerror(const char *file, int line, const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ vxerror(file, line, fmt, ap);
+ va_end(ap);
+}
+
+/*
+ * Internal form of error() and xerror().
+ */
+static void
+vxerror(const char *file, int line, const char *fmt, va_list ap)
+{
+ vxmsg(file, line, "", fmt, ap);
+ errors++;
+}
+
+
+/*
+ * Internal error, abort.
+ */
+__dead void
+panic(const char *fmt, ...)
Home |
Main Index |
Thread Index |
Old Index