diff options
author | robert <robert@openbsd.org> | 2021-04-19 15:34:58 +0200 |
---|---|---|
committer | ToMe25 <ToMe25@gmx.de> | 2021-04-19 15:34:58 +0200 |
commit | 43e4c5257918fafdfb32eb1cca40c7ae0b4806b4 (patch) | |
tree | 66821801caa9220e8cd485608f9f961af66fb844 /sysdeps | |
parent | fd162f9cb845d0c9533db261c6c6f1d88d1ce012 (diff) | |
download | libgtop-43e4c5257918fafdfb32eb1cca40c7ae0b4806b4.tar.gz |
Fix shm_limits.c, sem_limits.c, and msg_limits.c
by using sysctl instead of kvm_nlist
Co-authored-by: jasper <jasper@openbsd.org>
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/openbsd/msg_limits.c | 28 | ||||
-rw-r--r-- | sysdeps/openbsd/sem_limits.c | 28 | ||||
-rw-r--r-- | sysdeps/openbsd/shm_limits.c | 27 |
3 files changed, 50 insertions, 33 deletions
diff --git a/sysdeps/openbsd/msg_limits.c b/sysdeps/openbsd/msg_limits.c index bc7c6e23..840d75e2 100644 --- a/sysdeps/openbsd/msg_limits.c +++ b/sysdeps/openbsd/msg_limits.c @@ -47,28 +47,34 @@ static const unsigned long _glibtop_sysdeps_msg_limits = * since `msginfo' is already declared external in <sys/msg.h>. */ static struct msginfo _msginfo; -/* nlist structure for kernel access */ -static struct nlist nlst [] = { - { "_msginfo" }, - { 0 } -}; - /* Init function. */ void _glibtop_init_msg_limits_p (glibtop *server) { - if (kvm_nlist (server->machine->kd, nlst) < 0) { - glibtop_warn_io_r (server, "kvm_nlist (msg_limits)"); + int mib[3]; + struct msg_sysctl_info *msgsi; + + size_t len = sizeof(struct msginfo); + + mib[0] = CTL_KERN; + mib[1] = KERN_SYSVIPC_INFO; + mib[2] = KERN_SYSVIPC_MSG_INFO; + + if ((msgsi = malloc(len)) == NULL) { + glibtop_warn_io_r (server, "malloc (shm_limits)"); return; } - if (kvm_read (server->machine->kd, nlst [0].n_value, - &_msginfo, sizeof (_msginfo)) != sizeof (_msginfo)) { - glibtop_warn_io_r (server, "kvm_read (msginfo)"); + if (sysctl(mib, 3, msgsi, &len, NULL, 0) < 0) { + glibtop_warn_io_r (server, "sysctl (shm_limits)"); return; } + _msginfo = msgsi->msginfo; + + free (msgsi); + server->sysdeps.msg_limits = _glibtop_sysdeps_msg_limits; } diff --git a/sysdeps/openbsd/sem_limits.c b/sysdeps/openbsd/sem_limits.c index df1dfc29..12e88ff0 100644 --- a/sysdeps/openbsd/sem_limits.c +++ b/sysdeps/openbsd/sem_limits.c @@ -45,28 +45,34 @@ static unsigned long _glibtop_sysdeps_sem_limits = * since `seminfo' is already declared external in <sys/sem.h>. */ static struct seminfo _seminfo; -/* nlist structure for kernel access */ -static struct nlist nlst [] = { - { "_seminfo" }, - { 0 } -}; - /* Init function. */ void _glibtop_init_sem_limits_p (glibtop *server) { - if (kvm_nlist (server->machine->kd, nlst) < 0) { - glibtop_warn_io_r (server, "kvm_nlist (sem_limits)"); + int mib[3]; + struct sem_sysctl_info *semsi; + + size_t len = sizeof(struct seminfo); + + mib[0] = CTL_KERN; + mib[1] = KERN_SYSVIPC_INFO; + mib[2] = KERN_SYSVIPC_SEM_INFO; + + if ((semsi = malloc(len)) == NULL) { + glibtop_warn_io_r (server, "malloc (shm_limits)"); return; } - if (kvm_read (server->machine->kd, nlst [0].n_value, - &_seminfo, sizeof (_seminfo)) != sizeof (_seminfo)) { - glibtop_warn_io_r (server, "kvm_read (seminfo)"); + if (sysctl(mib, 3, semsi, &len, NULL, 0) < 0) { + glibtop_warn_io_r (server, "sysctl (shm_limits)"); return; } + _seminfo = semsi->seminfo; + + free (semsi); + server->sysdeps.sem_limits = _glibtop_sysdeps_sem_limits; } diff --git a/sysdeps/openbsd/shm_limits.c b/sysdeps/openbsd/shm_limits.c index 16fc5cf7..fb43756a 100644 --- a/sysdeps/openbsd/shm_limits.c +++ b/sysdeps/openbsd/shm_limits.c @@ -39,28 +39,33 @@ static unsigned long _glibtop_sysdeps_shm_limits = * since `shminfo' is already declared external in <sys/shm.h>. */ static struct shminfo _shminfo; -/* nlist structure for kernel access */ -static struct nlist nlst [] = { - { "_shminfo" }, - { 0 } -}; - /* Init function. */ void _glibtop_init_shm_limits_p (glibtop *server) { - if (kvm_nlist (server->machine->kd, nlst) < 0) { - glibtop_warn_io_r (server, "kvm_nlist (shm_limits)"); + int mib[3]; + struct shm_sysctl_info *shmsi; + size_t len = sizeof(struct shminfo); + + mib[0] = CTL_KERN; + mib[1] = KERN_SYSVIPC_INFO; + mib[2] = KERN_SYSVIPC_SHM_INFO; + + if ((shmsi = malloc(len)) == NULL) { + glibtop_warn_io_r (server, "malloc (shm_limits)"); return; } - if (kvm_read (server->machine->kd, nlst [0].n_value, - &_shminfo, sizeof (_shminfo)) != sizeof (_shminfo)) { - glibtop_warn_io_r (server, "kvm_read (shminfo)"); + if (sysctl(mib, 3, shmsi, &len, NULL, 0) < 0) { + glibtop_warn_io_r (server, "sysctl (shm_limits)"); return; } + _shminfo = shmsi->shminfo; + + free (shmsi); + server->sysdeps.shm_limits = _glibtop_sysdeps_shm_limits; } |