diff options
author | Benoît Dejean <benoit@placenet.org> | 2007-02-18 01:10:53 +0000 |
---|---|---|
committer | Benoît Dejean <bdejean@src.gnome.org> | 2007-02-18 01:10:53 +0000 |
commit | 5a15e409cf8ec0d66691aedfb403b25995d026b5 (patch) | |
tree | 18a73bee52f688b8fdd39f0db80fc7fbde595a15 /sysdeps/freebsd/shm_limits.c | |
parent | 747438e3340c2eb7eddfa3f32aa2a176edb34b14 (diff) | |
download | libgtop-5a15e409cf8ec0d66691aedfb403b25995d026b5.tar.gz |
Huge (k)FreeBSD update. (k)FreeBSD support is freebsd/ Other BSD are in
2007-02-18 Benoît Dejean <benoit@placenet.org>
* configure.in:
* libgtop-sysdeps.m4:
* sysdeps/Makefile.am:
Huge (k)FreeBSD update.
(k)FreeBSD support is freebsd/
Other BSD are in bsd/
Patch by Joe Marcus Clarke <marcus@freebsd.org>
Alexander Nedotsukov <bland@FreeBSD.org>
Closes #407693.
svn path=/trunk/; revision=2557
Diffstat (limited to 'sysdeps/freebsd/shm_limits.c')
-rw-r--r-- | sysdeps/freebsd/shm_limits.c | 105 |
1 files changed, 43 insertions, 62 deletions
diff --git a/sysdeps/freebsd/shm_limits.c b/sysdeps/freebsd/shm_limits.c index c7b2584b..4251e9b6 100644 --- a/sysdeps/freebsd/shm_limits.c +++ b/sysdeps/freebsd/shm_limits.c @@ -26,91 +26,72 @@ #include <glibtop/error.h> #include <glibtop/shm_limits.h> -#include <glibtop_suid.h> - -#if defined(__bsdi__) && (_BSDI_VERSION < 199700) -/* Older versions of BSDI don't seem to have this. */ - -void -glibtop_init_shm_limits_p (glibtop *server) -{ } - -void -glibtop_get_shm_limits_p (glibtop *server, glibtop_shm_limits *buf) -{ - glibtop_init_p (server, (1L << GLIBTOP_SYSDEPS_SHM_LIMITS), 0); - - memset (buf, 0, sizeof (glibtop_shm_limits)); -} - -#else - -/* #define KERNEL to get declaration of `struct shminfo'. */ - -#if (defined(__FreeBSD__) && (__FreeBSD_version < 410000)) || defined(__bsdi__) -#define KERNEL 1 -#else -#define _KERNEL 1 -#endif - -#include <sys/ipc.h> -#include <sys/shm.h> +#include <sys/types.h> +#include <sys/sysctl.h> static unsigned long _glibtop_sysdeps_shm_limits = (1L << GLIBTOP_IPC_SHMMAX) + (1L << GLIBTOP_IPC_SHMMIN) + (1L << GLIBTOP_IPC_SHMMNI) + (1L << GLIBTOP_IPC_SHMSEG) + (1L << GLIBTOP_IPC_SHMALL); -/* The values in this structure never change at runtime, so we only - * read it once during initialization. We have to use the name `_shminfo' - * 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) +glibtop_init_shm_limits_s (glibtop *server) { - if (kvm_nlist (server->machine.kd, nlst) < 0) { - glibtop_warn_io_r (server, "kvm_nlist (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)"); - return; - } - server->sysdeps.shm_limits = _glibtop_sysdeps_shm_limits; } /* Provides information about sysv ipc limits. */ void -glibtop_get_shm_limits_p (glibtop *server, glibtop_shm_limits *buf) +glibtop_get_shm_limits_s (glibtop *server, glibtop_shm_limits *buf) { - glibtop_init_p (server, (1L << GLIBTOP_SYSDEPS_SHM_LIMITS), 0); + size_t len; + int shmmax, shmmin, shmmni, shmseg, shmall; + + glibtop_init_s (&server, GLIBTOP_SYSDEPS_SHM_LIMITS, 0); memset (buf, 0, sizeof (glibtop_shm_limits)); if (server->sysdeps.shm_limits == 0) return; - buf->shmmax = _shminfo.shmmax; - buf->shmmin = _shminfo.shmmin; - buf->shmmni = _shminfo.shmmni; - buf->shmseg = _shminfo.shmseg; - buf->shmall = _shminfo.shmall; + len = sizeof (shmmax); + if (sysctlbyname ("kern.ipc.shmmax", &shmmax, &len, NULL, 0)) { + glibtop_warn_io_r (server, "sysctl (kern.ipc.shmmax)"); + return; + } - buf->flags = _glibtop_sysdeps_shm_limits; -} + len = sizeof (shmmin); + if (sysctlbyname ("kern.ipc.shmmin", &shmmin, &len, NULL, 0)) { + glibtop_warn_io_r (server, "sysctl (kern.ipc.shmmin)"); + return; + } -#endif /* either a newer BSDI or no BSDI at all. */ + len = sizeof (shmmni); + if (sysctlbyname ("kern.ipc.shmmni", &shmmni, &len, NULL, 0)) { + glibtop_warn_io_r (server, "sysctl (kern.ipc.shmmni)"); + return; + } + len = sizeof (shmseg); + if (sysctlbyname ("kern.ipc.shmseg", &shmseg, &len, NULL, 0)) { + glibtop_warn_io_r (server, "sysctl (kern.ipc.shmseg)"); + return; + } + + len = sizeof (shmall); + if (sysctlbyname ("kern.ipc.shmall", &shmall, &len, NULL, 0)) { + glibtop_warn_io_r (server, "sysctl (kern.ipc.shmall)"); + return; + } + + buf->shmmax = shmmax; + buf->shmmin = shmmin; + buf->shmmni = shmmni; + buf->shmseg = shmseg; + buf->shmall = shmall; + + buf->flags = _glibtop_sysdeps_shm_limits; +} |