xref: /original-bsd/usr.bin/vmstat.sparc/util.c (revision c3e32dec)
1 /*
2  * Copyright (c) 1992, 1993
3  *	The Regents of the University of California.  All rights reserved.
4  *
5  * %sccs.include.redist.c%
6  */
7 
8 #ifndef lint
9 static char sccsid[] = "@(#)util.c	8.1 (Berkeley) 06/06/93";
10 #endif /* not lint */
11 
12 #include <sys/types.h>
13 
14 #include <errno.h>
15 #include <kvm.h>
16 #include <nlist.h>
17 #include <stdio.h>
18 #include <stdlib.h>
19 #if __STDC__
20 #include <stdarg.h>
21 #else
22 #include <varargs.h>
23 #endif
24 
25 #include "extern.h"
26 
27 /*
28  * kvm_nlist, but with error exits.
29  */
30 void
31 knlist(nl)
32 	struct nlist *nl;
33 {
34 	int nmissing;
35 
36 	if ((nmissing = kvm_nlist(kd, nl)) == 0)
37 		return;
38 	if (nmissing < 0)
39 		errexit("kvm_nlist: %s\n", kvm_geterr(kd));
40 	(void)fprintf(stderr, "vmstat: undefined symbols:");
41 	for (; nl->n_name && *nl->n_name; nl++)
42 		if (nl->n_type == 0)
43 			printf(" %s", nl->n_name);
44 	(void)fputc('\n', stderr);
45 	exit(1);
46 }
47 
48 /*
49  * kread reads something from the kernel, given its address.
50  * It aborts on failure.
51  */
52 void
53 kread(addr, buf, size, err)
54 	u_long addr;
55 	void *buf;
56 	size_t size;
57 	char *err;
58 {
59 
60 	if (kvm_read(kd, addr, buf, size) != size)
61 		errexit("kvm_read(%s): %s\n", err, kvm_geterr(kd));
62 }
63 
64 void
65 #if __STDC__
66 errexit(const char *fmt, ...)
67 #else
68 errexit(fmt, va_alist)
69 	char *fmt;
70 	va_dcl
71 #endif
72 {
73 	va_list ap;
74 
75 #if __STDC__
76 	va_start(ap, fmt);
77 #else
78 	va_start(ap);
79 #endif
80 	(void)fprintf(stderr, "vmstat: ");
81 	(void)vfprintf(stderr, fmt, ap);
82 	va_end(ap);
83 	exit(1);
84 	/* NOTREACHED */
85 }
86