--- projects/libstatgrab/src/libstatgrab/tools.c 2004/02/10 16:23:07 1.27 +++ projects/libstatgrab/src/libstatgrab/tools.c 2004/02/13 15:22:49 1.28 @@ -18,7 +18,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA * 02111-1307 USA * - * $Id: tools.c,v 1.27 2004/02/10 16:23:07 pajs Exp $ + * $Id: tools.c,v 1.28 2004/02/13 15:22:49 ats Exp $ */ #ifdef HAVE_CONFIG_H @@ -35,8 +35,10 @@ #include #include #endif -#ifdef NETBSD +#if defined(NETBSD) || defined(OPENBSD) #include +#include +#include #endif #include "tools.h" @@ -429,32 +431,29 @@ kvm_t *get_kvm() { } #endif -#ifdef NETBSD +#if defined(NETBSD) || defined(OPENBSD) struct uvmexp *get_uvmexp() { - static u_long addr = 0; - static struct uvmexp uvm; - kvm_t *kvmd = get_kvm(); + int mib[2]; + size_t size; + static struct uvmexp *uvm = NULL; - if (kvmd == NULL) { + mib[0] = CTL_VM; + mib[1] = VM_UVMEXP; + + if (sysctl(mib, 2, NULL, &size, NULL, 0) < 0) { return NULL; } - if (addr == 0) { - struct nlist symbols[] = { - { "_uvmexp" }, - { NULL } - }; - - if (kvm_nlist(kvmd, symbols) != 0) { - return NULL; - } - addr = symbols[0].n_value; + uvm = realloc(uvm, size); + if (uvm == NULL) { + return NULL; } - if (kvm_read(kvmd, addr, &uvm, sizeof uvm) != sizeof uvm) { + if (sysctl(mib, 2, uvm, &size, NULL, 0) < 0) { return NULL; } - return &uvm; + + return uvm; } #endif