Return 0 on success and -1 on error.

This commit is contained in:
Martin Baulig
1999-10-24 20:17:42 +00:00
parent 507f171b63
commit 7a9bb6e43d
20 changed files with 153 additions and 65 deletions

View File

@@ -53,11 +53,13 @@ glibtop_init_cpu_p (glibtop *server)
{
if (kvm_nlist (server->machine.kd, nlst) != 0) {
glibtop_warn_io_r (server, "kvm_nlist (cpu)");
return;
return -1;
}
/* Set this only if kvm_nlist () succeeded. */
server->sysdeps.cpu = _glibtop_sysdeps_cpu;
return 0;
}
/* Provides information about cpu usage. */
@@ -76,19 +78,19 @@ glibtop_get_cpu_p (glibtop *server, glibtop_cpu *buf)
/* If this fails, the nlist may not be valid. */
if (server->sysdeps.cpu == 0)
return;
return -1;
if (kvm_read (server->machine.kd, nlst [0].n_value,
&cpts, sizeof (cpts)) != sizeof (cpts)) {
glibtop_warn_io_r (server, "kvm_read (cp_time)");
return;
return -1;
}
/* Get the clockrate data */
length = sizeof (struct clockinfo);
if (sysctl (mib, mib_length, &ci, &length, NULL, 0)) {
glibtop_warn_io_r (server, "sysctl");
return;
return -1;
}
/* set user time */
@@ -114,4 +116,6 @@ glibtop_get_cpu_p (glibtop *server, glibtop_cpu *buf)
/* Set the flags last. */
buf->flags = _glibtop_sysdeps_cpu;
return 0;
}

View File

@@ -36,6 +36,8 @@ int
glibtop_init_loadavg_p (glibtop *server)
{
server->sysdeps.loadavg = _glibtop_sysdeps_loadavg;
return 0;
}
/* Provides load averange. */
@@ -57,4 +59,6 @@ glibtop_get_loadavg_p (glibtop *server, glibtop_loadavg *buf)
for (i = 0; i < 3; i++) {
buf->loadavg [i] = ldavg [i];
} /* end for */
return 0;
}

View File

@@ -94,7 +94,7 @@ glibtop_init_mem_p (glibtop *server)
if (kvm_nlist (server->machine.kd, nlst) != 0) {
glibtop_warn_io_r (server, "kvm_nlist (mem)");
return;
return -1;
}
/* get the page size with "getpagesize" and calculate pageshift
@@ -110,6 +110,8 @@ glibtop_init_mem_p (glibtop *server)
pageshift -= LOG1024;
server->sysdeps.mem = _glibtop_sysdeps_mem;
return 0;
}
int
@@ -133,7 +135,7 @@ glibtop_get_mem_p (glibtop *server, glibtop_mem *buf)
memset (buf, 0, sizeof (glibtop_mem));
if (server->sysdeps.mem == 0)
return;
return -1;
/* [FIXME: On FreeBSD 2.2.6, sysctl () returns an incorrect
* value for `vmt.vm'. We use some code from Unix top
@@ -143,28 +145,28 @@ glibtop_get_mem_p (glibtop *server, glibtop_mem *buf)
length_vmt = sizeof (vmt);
if (sysctl (mib, 2, &vmt, &length_vmt, NULL, 0)) {
glibtop_warn_io_r (server, "sysctl (vmt)");
return;
return -1;
}
#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000)
length_uvmexp = sizeof (uvmexp);
if (sysctl (mib_uvmexp, 2, &uvmexp, &length_uvmexp, NULL, 0)) {
glibtop_warn_io_r (server, "sysctl (uvmexp)");
return;
return -1;
}
#else
/* Get the data from kvm_* */
if (kvm_read (server->machine.kd, nlst[1].n_value,
&vmm, sizeof (vmm)) != sizeof (vmm)) {
glibtop_warn_io_r (server, "kvm_read (cnt)");
return;
return -1;
}
#endif
if (kvm_read (server->machine.kd, nlst[0].n_value,
&bufspace, sizeof (bufspace)) != sizeof (bufspace)) {
glibtop_warn_io_r (server, "kvm_read (bufspace)");
return;
return -1;
}
/* convert memory stats to Kbytes */
@@ -219,4 +221,6 @@ glibtop_get_mem_p (glibtop *server, glibtop_mem *buf)
/* Set the values to return */
buf->flags = _glibtop_sysdeps_mem;
return 0;
}

View File

@@ -32,7 +32,9 @@
int
glibtop_init_msg_limits_p (glibtop *server)
{ }
{
return 0;
}
int
glibtop_get_msg_limits_p (glibtop *server, glibtop_msg_limits *buf)
@@ -40,6 +42,8 @@ glibtop_get_msg_limits_p (glibtop *server, glibtop_msg_limits *buf)
glibtop_init_p (server, (1L << GLIBTOP_SYSDEPS_MSG_LIMITS), 0);
memset (buf, 0, sizeof (glibtop_msg_limits));
return 0;
}
#else
@@ -78,16 +82,18 @@ glibtop_init_msg_limits_p (glibtop *server)
{
if (kvm_nlist (server->machine.kd, nlst) != 0) {
glibtop_warn_io_r (server, "kvm_nlist (msg_limits)");
return;
return -1;
}
if (kvm_read (server->machine.kd, nlst [0].n_value,
&_msginfo, sizeof (_msginfo)) != sizeof (_msginfo)) {
glibtop_warn_io_r (server, "kvm_read (msginfo)");
return;
return -1;
}
server->sysdeps.msg_limits = _glibtop_sysdeps_msg_limits;
return 0;
}
/* Provides information about sysv ipc limits. */
@@ -100,7 +106,7 @@ glibtop_get_msg_limits_p (glibtop *server, glibtop_msg_limits *buf)
memset (buf, 0, sizeof (glibtop_msg_limits));
if (server->sysdeps.msg_limits == 0)
return;
return -1;
buf->msgmax = _msginfo.msgmax;
buf->msgmni = _msginfo.msgmni;
@@ -109,6 +115,8 @@ glibtop_get_msg_limits_p (glibtop *server, glibtop_msg_limits *buf)
buf->msgssz = _msginfo.msgtql;
buf->flags = _glibtop_sysdeps_msg_limits;
return 0;
}
#endif /* either a newer BSDI or no BSDI at all. */

View File

@@ -69,6 +69,8 @@ glibtop_init_netload_p (glibtop *server)
if (kvm_nlist (server->machine.kd, nlst) != 0)
glibtop_error_io_r (server, "kvm_nlist");
return 0;
}
/* Provides Network statistics. */
@@ -191,7 +193,7 @@ glibtop_get_netload_p (glibtop *server, glibtop_netload *buf,
buf->collisions = ifnet.if_collisions;
buf->flags = _glibtop_sysdeps_netload;
return;
return -1;
}
#if defined(__FreeBSD__) && (__FreeBSD_version >= 300000)
@@ -211,4 +213,6 @@ glibtop_get_netload_p (glibtop *server, glibtop_netload *buf,
ifnetaddr = (u_long) ifnet.if_list.tqe_next;
#endif
}
return 0;
}

View File

@@ -84,6 +84,8 @@ glibtop_init_ppp_p (glibtop *server)
if (kvm_nlist (server->machine.kd, nlst) != 0)
glibtop_error_io_r (server, "kvm_nlist");
return 0;
}
/* Provides information about ppp usage. */
@@ -141,4 +143,6 @@ glibtop_get_ppp_p (glibtop *server, glibtop_ppp *buf, unsigned short device)
buf->flags |= _glibtop_sysdeps_ppp_acct;
#endif
#endif /* HAVE_I4B */
return 0;
}

View File

@@ -41,6 +41,8 @@ int
glibtop_init_proc_args_p (glibtop *server)
{
server->sysdeps.proc_args = _glibtop_sysdeps_proc_args;
return 0;
}
/* Provides detailed information about a process. */

View File

@@ -70,6 +70,8 @@ glibtop_init_proc_kernel_p (glibtop *server)
server->sysdeps.proc_kernel = _glibtop_sysdeps_proc_kernel_pstats |
_glibtop_sysdeps_proc_kernel_pcb |
_glibtop_sysdeps_proc_kernel_wchan;
return 0;
}
int
@@ -91,10 +93,10 @@ glibtop_get_proc_kernel_p (glibtop *server,
memset (buf, 0, sizeof (glibtop_proc_kernel));
if (server->sysdeps.proc_time == 0)
return;
return -1;
/* It does not work for the swapper task. */
if (pid == 0) return;
if (pid == 0) return -1;
/* Get the process information */
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count);
@@ -125,7 +127,7 @@ glibtop_get_proc_kernel_p (glibtop *server,
* `kvm_uread' work. */
sprintf (filename, "/proc/%d/mem", (int) pid);
if (stat (filename, &statb)) return;
if (stat (filename, &statb)) return -1;
glibtop_suid_enter (server);
@@ -181,4 +183,6 @@ glibtop_get_proc_kernel_p (glibtop *server,
/* Taken from `wchan ()' in `/usr/src/bin/ps/print.c'. */
glibtop_suid_leave (server);
return 0;
}

View File

@@ -56,6 +56,8 @@ int
glibtop_init_proclist_p (glibtop *server)
{
server->sysdeps.proclist = _glibtop_sysdeps_proclist;
return 0;
}
unsigned *

View File

@@ -71,6 +71,8 @@ int
glibtop_init_proc_map_p (glibtop *server)
{
server->sysdeps.proc_map = _glibtop_sysdeps_proc_map;
return 0;
}
/* Provides detailed information about a process. */

View File

@@ -100,6 +100,8 @@ glibtop_init_proc_mem_p (glibtop *server)
server->sysdeps.proc_mem = _glibtop_sysdeps_proc_mem |
_glibtop_sysdeps_proc_mem_share;
return 0;
}
/* Provides detailed information about a process. */
@@ -125,23 +127,23 @@ glibtop_get_proc_mem_p (glibtop *server, glibtop_proc_mem *buf,
memset (buf, 0, sizeof (glibtop_proc_mem));
if (server->sysdeps.proc_mem == 0)
return;
return -1;
/* It does not work for the swapper task. */
if (pid == 0) return;
if (pid == 0) return -1;
/* Get the process data */
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count);
if ((pinfo == NULL) || (count < 1)) {
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
return;
return -1;
}
if (kvm_read (server->machine.kd,
(unsigned long) pinfo [0].kp_proc.p_limit,
(char *) &plimit, sizeof (plimit)) != sizeof (plimit)) {
glibtop_warn_io_r (server, "kvm_read (plimit)");
return;
return -1;
}
buf->rss_rlim = (u_int64_t)
@@ -161,7 +163,7 @@ glibtop_get_proc_mem_p (glibtop *server, glibtop_proc_mem *buf,
(unsigned long) pinfo [0].kp_proc.p_vmspace,
(char *) &vmspace, sizeof (vmspace)) != sizeof (vmspace)) {
glibtop_warn_io_r (server, "kvm_read (vmspace)");
return;
return -1;
}
first = vmspace.vm_map.header.next;
@@ -170,7 +172,7 @@ glibtop_get_proc_mem_p (glibtop *server, glibtop_proc_mem *buf,
(unsigned long) vmspace.vm_map.header.next,
(char *) &entry, sizeof (entry)) != sizeof (entry)) {
glibtop_warn_io_r (server, "kvm_read (entry)");
return;
return -1;
}
/* Walk through the `vm_map_entry' list ... */
@@ -184,7 +186,7 @@ glibtop_get_proc_mem_p (glibtop *server, glibtop_proc_mem *buf,
(unsigned long) entry.next,
&entry, sizeof (entry)) != sizeof (entry)) {
glibtop_warn_io_r (server, "kvm_read (entry)");
return;
return -1;
}
#ifdef __FreeBSD__
@@ -215,7 +217,7 @@ glibtop_get_proc_mem_p (glibtop *server, glibtop_proc_mem *buf,
(unsigned long) entry.object.uvm_obj,
&vnode, sizeof (vnode)) != sizeof (vnode)) {
glibtop_warn_io_r (server, "kvm_read (vnode)");
return;
return -1;
}
#else
if (!entry.object.vm_object)
@@ -227,7 +229,7 @@ glibtop_get_proc_mem_p (glibtop *server, glibtop_proc_mem *buf,
(unsigned long) entry.object.vm_object,
&object, sizeof (object)) != sizeof (object)) {
glibtop_warn_io_r (server, "kvm_read (object)");
return;
return -1;
}
#endif
/* If the object is of type vnode, add its size */
@@ -256,4 +258,6 @@ glibtop_get_proc_mem_p (glibtop *server, glibtop_proc_mem *buf,
buf->flags = _glibtop_sysdeps_proc_mem |
_glibtop_sysdeps_proc_mem_share;
return 0;
}

View File

@@ -39,6 +39,8 @@ int
glibtop_init_proc_segment_p (glibtop *server)
{
server->sysdeps.proc_segment = _glibtop_sysdeps_proc_segment;
return 0;
}
/* Provides detailed information about a process. */
@@ -56,7 +58,7 @@ glibtop_get_proc_segment_p (glibtop *server,
/* Get the process info from the kernel */
kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, count);
if (*count != 1) {
return; /* the zeroed-out buffer indicating no data */
return -1; /* the zeroed-out buffer indicating no data */
}
/* trs: text resident set size
@@ -78,5 +80,7 @@ glibtop_get_proc_segment_p (glibtop *server,
/* start_stack: address of the bottom of stack segment
*/
#endif
return 0;
}

View File

@@ -43,6 +43,8 @@ int
glibtop_init_proc_signal_p (glibtop *server)
{
server->sysdeps.proc_signal = _glibtop_sysdeps_proc_signal;
return 0;
}
int
@@ -58,13 +60,13 @@ glibtop_get_proc_signal_p (glibtop *server,
memset (buf, 0, sizeof (glibtop_proc_signal));
/* It does not work for the swapper task. */
if (pid == 0) return;
if (pid == 0) return -1;
/* Get the process information */
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count);
if ((pinfo == NULL) || (count != 1)) {
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
return;
return -1;
}
/* signal: mask of pending signals.
@@ -104,4 +106,6 @@ glibtop_get_proc_signal_p (glibtop *server,
#endif
buf->flags = _glibtop_sysdeps_proc_signal;
return 0;
}

View File

@@ -50,6 +50,8 @@ glibtop_init_proc_state_p (glibtop *server)
{
server->sysdeps.proc_state = _glibtop_sysdeps_proc_state |
_glibtop_sysdeps_proc_state_new;
return 0;
}
/* Provides detailed information about a process. */
@@ -67,13 +69,13 @@ glibtop_get_proc_state_p (glibtop *server,
memset (buf, 0, sizeof (glibtop_proc_state));
/* It does not work for the swapper task. */
if (pid == 0) return;
if (pid == 0) return -1;
/* Get the process information */
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count);
if ((pinfo == NULL) || (count != 1)) {
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
return;
return -1;
}
strncpy (buf->cmd, pinfo [0].kp_proc.p_comm, sizeof (buf->cmd)-1);
@@ -109,7 +111,7 @@ glibtop_get_proc_state_p (glibtop *server,
buf->state = GLIBTOP_PROCESS_ZOMBIE;
break;
default:
return;
return -1;
}
#else
switch (pinfo [0].kp_proc.p_stat) {
@@ -129,9 +131,11 @@ glibtop_get_proc_state_p (glibtop *server,
buf->state = 'Z';
break;
default:
return;
return -1;
}
#endif
buf->flags |= (1L << GLIBTOP_PROC_STATE_STATE);
return 0;
}

View File

@@ -48,6 +48,8 @@ glibtop_init_proc_time_p (glibtop *server)
{
server->sysdeps.proc_time = _glibtop_sysdeps_proc_time |
_glibtop_sysdeps_proc_time_user;
return 0;
}
/* Taken from /usr/src/sys/kern/kern_resource.c */
@@ -140,15 +142,15 @@ glibtop_get_proc_time_p (glibtop *server, glibtop_proc_time *buf,
memset (buf, 0, sizeof (glibtop_proc_time));
/* It does not work for the swapper task. */
if (pid == 0) return;
if (pid == 0) return -1;
#if !(defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000))
if (server->sysdeps.proc_time == 0)
return;
return -1;
#ifndef __bsdi__
sprintf (filename, "/proc/%d/mem", (int) pid);
if (stat (filename, &statb)) return;
if (stat (filename, &statb)) return -1;
#endif
#endif
@@ -173,7 +175,7 @@ glibtop_get_proc_time_p (glibtop *server, glibtop_proc_time *buf,
(unsigned long) pinfo [0].kp_proc.p_stats,
&pstats, sizeof (pstats)) != sizeof (pstats)) {
glibtop_warn_io_r (server, "kvm_read (pstats)");
return;
return -1;
}
glibtop_suid_leave (server);
@@ -225,5 +227,7 @@ glibtop_get_proc_time_p (glibtop *server, glibtop_proc_time *buf,
glibtop_suid_leave (server);
#endif
return 0;
}

View File

@@ -52,6 +52,8 @@ glibtop_init_proc_uid_p (glibtop *server)
{
server->sysdeps.proc_uid = _glibtop_sysdeps_proc_uid |
_glibtop_sysdeps_proc_uid_groups;
return 0;
}
/* Provides detailed information about a process. */
@@ -75,13 +77,13 @@ glibtop_get_proc_uid_p (glibtop *server, glibtop_proc_uid *buf,
memset (buf, 0, sizeof (glibtop_proc_uid));
/* It does not work for the swapper task. */
if (pid == 0) return;
if (pid == 0) return -1;
/* Get the process information */
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count);
if ((pinfo == NULL) || (count != 1)) {
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
return;
return -1;
}
buf->uid = pinfo [0].kp_eproc.e_pcred.p_ruid;
@@ -125,4 +127,6 @@ glibtop_get_proc_uid_p (glibtop *server, glibtop_proc_uid *buf,
}
#endif
#endif
return 0;
}

View File

@@ -32,7 +32,10 @@
int
glibtop_init_sem_limits_p (glibtop *server)
{ }
{
return 0;
}
int
glibtop_get_sem_limits_p (glibtop *server, glibtop_sem_limits *buf)
@@ -40,6 +43,8 @@ glibtop_get_sem_limits_p (glibtop *server, glibtop_sem_limits *buf)
glibtop_init_p (server, (1L << GLIBTOP_SYSDEPS_SEM_LIMITS), 0);
memset (buf, 0, sizeof (glibtop_sem_limits));
return 0;
}
#else
@@ -80,16 +85,18 @@ glibtop_init_sem_limits_p (glibtop *server)
{
if (kvm_nlist (server->machine.kd, nlst) != 0) {
glibtop_warn_io_r (server, "kvm_nlist (sem_limits)");
return;
return -1;
}
if (kvm_read (server->machine.kd, nlst [0].n_value,
&_seminfo, sizeof (_seminfo)) != sizeof (_seminfo)) {
glibtop_warn_io_r (server, "kvm_read (seminfo)");
return;
return -1;
}
server->sysdeps.sem_limits = _glibtop_sysdeps_sem_limits;
return 0;
}
/* Provides information about sysv sem limits. */
@@ -102,7 +109,7 @@ glibtop_get_sem_limits_p (glibtop *server, glibtop_sem_limits *buf)
memset (buf, 0, sizeof (glibtop_sem_limits));
if (server->sysdeps.sem_limits == 0)
return;
return -1;
buf->semmap = _seminfo.semmap;
buf->semmni = _seminfo.semmni;
@@ -114,6 +121,8 @@ glibtop_get_sem_limits_p (glibtop *server, glibtop_sem_limits *buf)
buf->semaem = _seminfo.semaem;
buf->flags = _glibtop_sysdeps_sem_limits;
return 0;
}
#endif /* either a newer BSDI or no BSDI at all. */

View File

@@ -32,7 +32,10 @@
int
glibtop_init_shm_limits_p (glibtop *server)
{ }
{
return 0;
}
int
glibtop_get_shm_limits_p (glibtop *server, glibtop_shm_limits *buf)
@@ -40,6 +43,8 @@ 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));
return 0;
}
#else
@@ -78,16 +83,18 @@ glibtop_init_shm_limits_p (glibtop *server)
{
if (kvm_nlist (server->machine.kd, nlst) != 0) {
glibtop_warn_io_r (server, "kvm_nlist (shm_limits)");
return;
return -1;
}
if (kvm_read (server->machine.kd, nlst [0].n_value,
&_shminfo, sizeof (_shminfo)) != sizeof (_shminfo)) {
glibtop_warn_io_r (server, "kvm_read (shminfo)");
return;
return -1;
}
server->sysdeps.shm_limits = _glibtop_sysdeps_shm_limits;
return 0;
}
/* Provides information about sysv ipc limits. */
@@ -100,7 +107,7 @@ glibtop_get_shm_limits_p (glibtop *server, glibtop_shm_limits *buf)
memset (buf, 0, sizeof (glibtop_shm_limits));
if (server->sysdeps.shm_limits == 0)
return;
return -1;
buf->shmmax = _shminfo.shmmax;
buf->shmmin = _shminfo.shmmin;
@@ -109,6 +116,8 @@ glibtop_get_shm_limits_p (glibtop *server, glibtop_shm_limits *buf)
buf->shmall = _shminfo.shmall;
buf->flags = _glibtop_sysdeps_shm_limits;
return 0;
}
#endif /* either a newer BSDI or no BSDI at all. */

View File

@@ -99,14 +99,14 @@ glibtop_init_swap_p (glibtop *server)
#if __FreeBSD__ < 4 || defined(__bsdi__)
if (kvm_nlist (server->machine.kd, nlst) != 0) {
glibtop_warn_io_r (server, "kvm_nlist (swap)");
return;
return -1;
}
#else
struct kvm_swap dummy;
if (kvm_getswapinfo (server->machine.kd, &dummy, 1, 0) != 0) {
glibtop_warn_io_r (server, "kvm_swap (swap)");
return;
return -1;
}
#endif
#endif
@@ -114,11 +114,13 @@ glibtop_init_swap_p (glibtop *server)
#if !(defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000))
if (kvm_nlist (server->machine.kd, nlst2) != 0) {
glibtop_warn_io_r (server, "kvm_nlist (cnt)");
return;
return -1;
}
#endif
server->sysdeps.swap = _glibtop_sysdeps_swap;
return 0;
}
/* Provides information about swap usage. */
@@ -173,13 +175,13 @@ glibtop_get_swap_p (glibtop *server, glibtop_swap *buf)
memset (buf, 0, sizeof (glibtop_swap));
if (server->sysdeps.swap == 0)
return;
return -1;
#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000)
length_uvmexp = sizeof (uvmexp);
if (sysctl (mib_uvmexp, 2, &uvmexp, &length_uvmexp, NULL, 0)) {
glibtop_warn_io_r (server, "sysctl (uvmexp)");
return;
return -1;
}
#else
/* This is used to get the `pagein' and `pageout' members. */
@@ -187,7 +189,7 @@ glibtop_get_swap_p (glibtop *server, glibtop_swap *buf)
if (kvm_read (server->machine.kd, nlst2[0].n_value,
&vmm, sizeof (vmm)) != sizeof (vmm)) {
glibtop_warn_io_r (server, "kvm_read (cnt)");
return;
return -1;
}
#endif
@@ -231,7 +233,7 @@ glibtop_get_swap_p (glibtop *server, glibtop_swap *buf)
if (kvm_read (server->machine.kd, nlst[VM_NSWAP].n_value,
&nswap, sizeof (nswap)) != sizeof (nswap)) {
glibtop_warn_io_r (server, "kvm_read (nswap)");
return;
return -1;
}
/* Number of swap devices. */
@@ -239,7 +241,7 @@ glibtop_get_swap_p (glibtop *server, glibtop_swap *buf)
if (kvm_read (server->machine.kd, nlst[VM_NSWDEV].n_value,
&nswdev, sizeof (nswdev)) != sizeof (nswdev)) {
glibtop_warn_io_r (server, "kvm_read (nswdev)");
return;
return -1;
}
/* Maximum size of a swap block. */
@@ -247,7 +249,7 @@ glibtop_get_swap_p (glibtop *server, glibtop_swap *buf)
if (kvm_read (server->machine.kd, nlst[VM_DMMAX].n_value,
&dmmax, sizeof (dmmax)) != sizeof (dmmax)) {
glibtop_warn_io_r (server, "kvm_read (dmmax)");
return;
return -1;
}
/* List of free swap areas. */
@@ -255,7 +257,7 @@ glibtop_get_swap_p (glibtop *server, glibtop_swap *buf)
if (kvm_read (server->machine.kd, nlst[VM_SWAPLIST].n_value,
&swaplist, sizeof (swaplist)) != sizeof (swaplist)) {
glibtop_warn_io_r (server, "kvm_read (swaplist)");
return;
return -1;
}
/* Kernel offset of list of swap devices and sizes. */
@@ -263,7 +265,7 @@ glibtop_get_swap_p (glibtop *server, glibtop_swap *buf)
if (kvm_read (server->machine.kd, nlst[VM_SWDEVT].n_value,
&ptr, sizeof (ptr)) != sizeof (ptr)) {
glibtop_warn_io_r (server, "kvm_read (swdevt)");
return;
return -1;
}
/* List of swap devices and sizes. */
@@ -273,7 +275,7 @@ glibtop_get_swap_p (glibtop *server, glibtop_swap *buf)
if (kvm_read (server->machine.kd, ptr, sw, sw_size) != (ssize_t)sw_size) {
glibtop_warn_io_r (server, "kvm_read (*swdevt)");
return;
return -1;
}
perdev = glibtop_malloc (nswdev * sizeof (*perdev));
@@ -291,7 +293,7 @@ glibtop_get_swap_p (glibtop *server, glibtop_swap *buf)
if (kvm_read (server->machine.kd, (int) swapptr, &head,
sizeof (struct rlist)) != sizeof (struct rlist)) {
glibtop_warn_io_r (server, "kvm_read (swapptr)");
return;
return -1;
}
top = head.rl_end;
@@ -383,7 +385,7 @@ glibtop_get_swap_p (glibtop *server, glibtop_swap *buf)
if (kvm_read (server->machine.kd, nlst[0].n_value,
&swap, sizeof (swap)) != sizeof (swap)) {
glibtop_warn_io_r (server, "kvm_read (swap)");
return;
return -1;
}
buf->flags = _glibtop_sysdeps_swap;
@@ -398,7 +400,7 @@ glibtop_get_swap_p (glibtop *server, glibtop_swap *buf)
nswap = swapctl (SWAP_NSWAP, NULL, 0);
if (nswap < 0) {
glibtop_warn_io_r (server, "swapctl (SWAP_NSWAP)");
return;
return -1;
}
swaplist = glibtop_calloc_r (server, nswap, sizeof (struct swapent));
@@ -406,7 +408,7 @@ glibtop_get_swap_p (glibtop *server, glibtop_swap *buf)
if (swapctl (SWAP_STATS, swaplist, nswap) != nswap) {
glibtop_warn_io_r (server, "swapctl (SWAP_STATS)");
glibtop_free_r (server, swaplist);
return;
return -1;
}
for (i = 0; i < nswap; i++) {
@@ -423,4 +425,6 @@ glibtop_get_swap_p (glibtop *server, glibtop_swap *buf)
buf->total = inuse + avail;
#endif
return 0;
}

View File

@@ -42,6 +42,8 @@ int
glibtop_init_uptime_p (glibtop *server)
{
server->sysdeps.uptime = _glibtop_sysdeps_uptime;
return 0;
}
/* Provides uptime and idle time. */
@@ -62,7 +64,7 @@ glibtop_get_uptime_p (glibtop *server, glibtop_uptime *buf)
/* Make sure all required fields are present. */
if ((cpu.flags & _required_cpu_flags) != _required_cpu_flags)
return;
return -1;
/* Calculate values. */
@@ -70,4 +72,6 @@ glibtop_get_uptime_p (glibtop *server, glibtop_uptime *buf)
buf->idletime = (double) cpu.idle / (double) cpu.frequency;
buf->flags = _glibtop_sysdeps_uptime;
return 0;
}