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
knlist(nl)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
kread(addr,buf,size,err)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__
errexit(const char * fmt,...)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