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