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

View File

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

View File

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

View File

@@ -32,7 +32,9 @@
int int
glibtop_init_msg_limits_p (glibtop *server) glibtop_init_msg_limits_p (glibtop *server)
{ } {
return 0;
}
int int
glibtop_get_msg_limits_p (glibtop *server, glibtop_msg_limits *buf) 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); glibtop_init_p (server, (1L << GLIBTOP_SYSDEPS_MSG_LIMITS), 0);
memset (buf, 0, sizeof (glibtop_msg_limits)); memset (buf, 0, sizeof (glibtop_msg_limits));
return 0;
} }
#else #else
@@ -78,16 +82,18 @@ glibtop_init_msg_limits_p (glibtop *server)
{ {
if (kvm_nlist (server->machine.kd, nlst) != 0) { if (kvm_nlist (server->machine.kd, nlst) != 0) {
glibtop_warn_io_r (server, "kvm_nlist (msg_limits)"); glibtop_warn_io_r (server, "kvm_nlist (msg_limits)");
return; return -1;
} }
if (kvm_read (server->machine.kd, nlst [0].n_value, if (kvm_read (server->machine.kd, nlst [0].n_value,
&_msginfo, sizeof (_msginfo)) != sizeof (_msginfo)) { &_msginfo, sizeof (_msginfo)) != sizeof (_msginfo)) {
glibtop_warn_io_r (server, "kvm_read (msginfo)"); glibtop_warn_io_r (server, "kvm_read (msginfo)");
return; return -1;
} }
server->sysdeps.msg_limits = _glibtop_sysdeps_msg_limits; server->sysdeps.msg_limits = _glibtop_sysdeps_msg_limits;
return 0;
} }
/* Provides information about sysv ipc limits. */ /* 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)); memset (buf, 0, sizeof (glibtop_msg_limits));
if (server->sysdeps.msg_limits == 0) if (server->sysdeps.msg_limits == 0)
return; return -1;
buf->msgmax = _msginfo.msgmax; buf->msgmax = _msginfo.msgmax;
buf->msgmni = _msginfo.msgmni; buf->msgmni = _msginfo.msgmni;
@@ -109,6 +115,8 @@ glibtop_get_msg_limits_p (glibtop *server, glibtop_msg_limits *buf)
buf->msgssz = _msginfo.msgtql; buf->msgssz = _msginfo.msgtql;
buf->flags = _glibtop_sysdeps_msg_limits; buf->flags = _glibtop_sysdeps_msg_limits;
return 0;
} }
#endif /* either a newer BSDI or no BSDI at all. */ #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) if (kvm_nlist (server->machine.kd, nlst) != 0)
glibtop_error_io_r (server, "kvm_nlist"); glibtop_error_io_r (server, "kvm_nlist");
return 0;
} }
/* Provides Network statistics. */ /* Provides Network statistics. */
@@ -191,7 +193,7 @@ glibtop_get_netload_p (glibtop *server, glibtop_netload *buf,
buf->collisions = ifnet.if_collisions; buf->collisions = ifnet.if_collisions;
buf->flags = _glibtop_sysdeps_netload; buf->flags = _glibtop_sysdeps_netload;
return; return -1;
} }
#if defined(__FreeBSD__) && (__FreeBSD_version >= 300000) #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; ifnetaddr = (u_long) ifnet.if_list.tqe_next;
#endif #endif
} }
return 0;
} }

View File

@@ -84,6 +84,8 @@ glibtop_init_ppp_p (glibtop *server)
if (kvm_nlist (server->machine.kd, nlst) != 0) if (kvm_nlist (server->machine.kd, nlst) != 0)
glibtop_error_io_r (server, "kvm_nlist"); glibtop_error_io_r (server, "kvm_nlist");
return 0;
} }
/* Provides information about ppp usage. */ /* 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; buf->flags |= _glibtop_sysdeps_ppp_acct;
#endif #endif
#endif /* HAVE_I4B */ #endif /* HAVE_I4B */
return 0;
} }

View File

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

View File

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

View File

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

View File

@@ -39,6 +39,8 @@ int
glibtop_init_proc_segment_p (glibtop *server) glibtop_init_proc_segment_p (glibtop *server)
{ {
server->sysdeps.proc_segment = _glibtop_sysdeps_proc_segment; server->sysdeps.proc_segment = _glibtop_sysdeps_proc_segment;
return 0;
} }
/* Provides detailed information about a process. */ /* Provides detailed information about a process. */
@@ -56,7 +58,7 @@ glibtop_get_proc_segment_p (glibtop *server,
/* Get the process info from the kernel */ /* Get the process info from the kernel */
kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, count); kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, count);
if (*count != 1) { 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 /* 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 /* start_stack: address of the bottom of stack segment
*/ */
#endif #endif
return 0;
} }

View File

@@ -43,6 +43,8 @@ int
glibtop_init_proc_signal_p (glibtop *server) glibtop_init_proc_signal_p (glibtop *server)
{ {
server->sysdeps.proc_signal = _glibtop_sysdeps_proc_signal; server->sysdeps.proc_signal = _glibtop_sysdeps_proc_signal;
return 0;
} }
int int
@@ -58,13 +60,13 @@ glibtop_get_proc_signal_p (glibtop *server,
memset (buf, 0, sizeof (glibtop_proc_signal)); memset (buf, 0, sizeof (glibtop_proc_signal));
/* It does not work for the swapper task. */ /* It does not work for the swapper task. */
if (pid == 0) return; if (pid == 0) return -1;
/* Get the process information */ /* Get the process information */
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count); pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count);
if ((pinfo == NULL) || (count != 1)) { if ((pinfo == NULL) || (count != 1)) {
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid); glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid);
return; return -1;
} }
/* signal: mask of pending signals. /* signal: mask of pending signals.
@@ -104,4 +106,6 @@ glibtop_get_proc_signal_p (glibtop *server,
#endif #endif
buf->flags = _glibtop_sysdeps_proc_signal; 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 | server->sysdeps.proc_state = _glibtop_sysdeps_proc_state |
_glibtop_sysdeps_proc_state_new; _glibtop_sysdeps_proc_state_new;
return 0;
} }
/* Provides detailed information about a process. */ /* Provides detailed information about a process. */
@@ -67,13 +69,13 @@ glibtop_get_proc_state_p (glibtop *server,
memset (buf, 0, sizeof (glibtop_proc_state)); memset (buf, 0, sizeof (glibtop_proc_state));
/* It does not work for the swapper task. */ /* It does not work for the swapper task. */
if (pid == 0) return; if (pid == 0) return -1;
/* Get the process information */ /* Get the process information */
pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count); pinfo = kvm_getprocs (server->machine.kd, KERN_PROC_PID, pid, &count);
if ((pinfo == NULL) || (count != 1)) { if ((pinfo == NULL) || (count != 1)) {
glibtop_warn_io_r (server, "kvm_getprocs (%d)", pid); 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); 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; buf->state = GLIBTOP_PROCESS_ZOMBIE;
break; break;
default: default:
return; return -1;
} }
#else #else
switch (pinfo [0].kp_proc.p_stat) { switch (pinfo [0].kp_proc.p_stat) {
@@ -129,9 +131,11 @@ glibtop_get_proc_state_p (glibtop *server,
buf->state = 'Z'; buf->state = 'Z';
break; break;
default: default:
return; return -1;
} }
#endif #endif
buf->flags |= (1L << GLIBTOP_PROC_STATE_STATE); 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 | server->sysdeps.proc_time = _glibtop_sysdeps_proc_time |
_glibtop_sysdeps_proc_time_user; _glibtop_sysdeps_proc_time_user;
return 0;
} }
/* Taken from /usr/src/sys/kern/kern_resource.c */ /* 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)); memset (buf, 0, sizeof (glibtop_proc_time));
/* It does not work for the swapper task. */ /* It does not work for the swapper task. */
if (pid == 0) return; if (pid == 0) return -1;
#if !(defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000)) #if !(defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000))
if (server->sysdeps.proc_time == 0) if (server->sysdeps.proc_time == 0)
return; return -1;
#ifndef __bsdi__ #ifndef __bsdi__
sprintf (filename, "/proc/%d/mem", (int) pid); sprintf (filename, "/proc/%d/mem", (int) pid);
if (stat (filename, &statb)) return; if (stat (filename, &statb)) return -1;
#endif #endif
#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, (unsigned long) pinfo [0].kp_proc.p_stats,
&pstats, sizeof (pstats)) != sizeof (pstats)) { &pstats, sizeof (pstats)) != sizeof (pstats)) {
glibtop_warn_io_r (server, "kvm_read (pstats)"); glibtop_warn_io_r (server, "kvm_read (pstats)");
return; return -1;
} }
glibtop_suid_leave (server); glibtop_suid_leave (server);
@@ -225,5 +227,7 @@ glibtop_get_proc_time_p (glibtop *server, glibtop_proc_time *buf,
glibtop_suid_leave (server); glibtop_suid_leave (server);
#endif #endif
return 0;
} }

View File

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

View File

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

View File

@@ -32,7 +32,10 @@
int int
glibtop_init_shm_limits_p (glibtop *server) glibtop_init_shm_limits_p (glibtop *server)
{ } {
return 0;
}
int int
glibtop_get_shm_limits_p (glibtop *server, glibtop_shm_limits *buf) 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); glibtop_init_p (server, (1L << GLIBTOP_SYSDEPS_SHM_LIMITS), 0);
memset (buf, 0, sizeof (glibtop_shm_limits)); memset (buf, 0, sizeof (glibtop_shm_limits));
return 0;
} }
#else #else
@@ -78,16 +83,18 @@ glibtop_init_shm_limits_p (glibtop *server)
{ {
if (kvm_nlist (server->machine.kd, nlst) != 0) { if (kvm_nlist (server->machine.kd, nlst) != 0) {
glibtop_warn_io_r (server, "kvm_nlist (shm_limits)"); glibtop_warn_io_r (server, "kvm_nlist (shm_limits)");
return; return -1;
} }
if (kvm_read (server->machine.kd, nlst [0].n_value, if (kvm_read (server->machine.kd, nlst [0].n_value,
&_shminfo, sizeof (_shminfo)) != sizeof (_shminfo)) { &_shminfo, sizeof (_shminfo)) != sizeof (_shminfo)) {
glibtop_warn_io_r (server, "kvm_read (shminfo)"); glibtop_warn_io_r (server, "kvm_read (shminfo)");
return; return -1;
} }
server->sysdeps.shm_limits = _glibtop_sysdeps_shm_limits; server->sysdeps.shm_limits = _glibtop_sysdeps_shm_limits;
return 0;
} }
/* Provides information about sysv ipc limits. */ /* 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)); memset (buf, 0, sizeof (glibtop_shm_limits));
if (server->sysdeps.shm_limits == 0) if (server->sysdeps.shm_limits == 0)
return; return -1;
buf->shmmax = _shminfo.shmmax; buf->shmmax = _shminfo.shmmax;
buf->shmmin = _shminfo.shmmin; buf->shmmin = _shminfo.shmmin;
@@ -109,6 +116,8 @@ glibtop_get_shm_limits_p (glibtop *server, glibtop_shm_limits *buf)
buf->shmall = _shminfo.shmall; buf->shmall = _shminfo.shmall;
buf->flags = _glibtop_sysdeps_shm_limits; buf->flags = _glibtop_sysdeps_shm_limits;
return 0;
} }
#endif /* either a newer BSDI or no BSDI at all. */ #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 __FreeBSD__ < 4 || defined(__bsdi__)
if (kvm_nlist (server->machine.kd, nlst) != 0) { if (kvm_nlist (server->machine.kd, nlst) != 0) {
glibtop_warn_io_r (server, "kvm_nlist (swap)"); glibtop_warn_io_r (server, "kvm_nlist (swap)");
return; return -1;
} }
#else #else
struct kvm_swap dummy; struct kvm_swap dummy;
if (kvm_getswapinfo (server->machine.kd, &dummy, 1, 0) != 0) { if (kvm_getswapinfo (server->machine.kd, &dummy, 1, 0) != 0) {
glibtop_warn_io_r (server, "kvm_swap (swap)"); glibtop_warn_io_r (server, "kvm_swap (swap)");
return; return -1;
} }
#endif #endif
#endif #endif
@@ -114,11 +114,13 @@ glibtop_init_swap_p (glibtop *server)
#if !(defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000)) #if !(defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000))
if (kvm_nlist (server->machine.kd, nlst2) != 0) { if (kvm_nlist (server->machine.kd, nlst2) != 0) {
glibtop_warn_io_r (server, "kvm_nlist (cnt)"); glibtop_warn_io_r (server, "kvm_nlist (cnt)");
return; return -1;
} }
#endif #endif
server->sysdeps.swap = _glibtop_sysdeps_swap; server->sysdeps.swap = _glibtop_sysdeps_swap;
return 0;
} }
/* Provides information about swap usage. */ /* Provides information about swap usage. */
@@ -173,13 +175,13 @@ glibtop_get_swap_p (glibtop *server, glibtop_swap *buf)
memset (buf, 0, sizeof (glibtop_swap)); memset (buf, 0, sizeof (glibtop_swap));
if (server->sysdeps.swap == 0) if (server->sysdeps.swap == 0)
return; return -1;
#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000) #if defined(__NetBSD__) && (__NetBSD_Version__ >= 104000000)
length_uvmexp = sizeof (uvmexp); length_uvmexp = sizeof (uvmexp);
if (sysctl (mib_uvmexp, 2, &uvmexp, &length_uvmexp, NULL, 0)) { if (sysctl (mib_uvmexp, 2, &uvmexp, &length_uvmexp, NULL, 0)) {
glibtop_warn_io_r (server, "sysctl (uvmexp)"); glibtop_warn_io_r (server, "sysctl (uvmexp)");
return; return -1;
} }
#else #else
/* This is used to get the `pagein' and `pageout' members. */ /* 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, if (kvm_read (server->machine.kd, nlst2[0].n_value,
&vmm, sizeof (vmm)) != sizeof (vmm)) { &vmm, sizeof (vmm)) != sizeof (vmm)) {
glibtop_warn_io_r (server, "kvm_read (cnt)"); glibtop_warn_io_r (server, "kvm_read (cnt)");
return; return -1;
} }
#endif #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, if (kvm_read (server->machine.kd, nlst[VM_NSWAP].n_value,
&nswap, sizeof (nswap)) != sizeof (nswap)) { &nswap, sizeof (nswap)) != sizeof (nswap)) {
glibtop_warn_io_r (server, "kvm_read (nswap)"); glibtop_warn_io_r (server, "kvm_read (nswap)");
return; return -1;
} }
/* Number of swap devices. */ /* 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, if (kvm_read (server->machine.kd, nlst[VM_NSWDEV].n_value,
&nswdev, sizeof (nswdev)) != sizeof (nswdev)) { &nswdev, sizeof (nswdev)) != sizeof (nswdev)) {
glibtop_warn_io_r (server, "kvm_read (nswdev)"); glibtop_warn_io_r (server, "kvm_read (nswdev)");
return; return -1;
} }
/* Maximum size of a swap block. */ /* 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, if (kvm_read (server->machine.kd, nlst[VM_DMMAX].n_value,
&dmmax, sizeof (dmmax)) != sizeof (dmmax)) { &dmmax, sizeof (dmmax)) != sizeof (dmmax)) {
glibtop_warn_io_r (server, "kvm_read (dmmax)"); glibtop_warn_io_r (server, "kvm_read (dmmax)");
return; return -1;
} }
/* List of free swap areas. */ /* 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, if (kvm_read (server->machine.kd, nlst[VM_SWAPLIST].n_value,
&swaplist, sizeof (swaplist)) != sizeof (swaplist)) { &swaplist, sizeof (swaplist)) != sizeof (swaplist)) {
glibtop_warn_io_r (server, "kvm_read (swaplist)"); glibtop_warn_io_r (server, "kvm_read (swaplist)");
return; return -1;
} }
/* Kernel offset of list of swap devices and sizes. */ /* 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, if (kvm_read (server->machine.kd, nlst[VM_SWDEVT].n_value,
&ptr, sizeof (ptr)) != sizeof (ptr)) { &ptr, sizeof (ptr)) != sizeof (ptr)) {
glibtop_warn_io_r (server, "kvm_read (swdevt)"); glibtop_warn_io_r (server, "kvm_read (swdevt)");
return; return -1;
} }
/* List of swap devices and sizes. */ /* 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) { if (kvm_read (server->machine.kd, ptr, sw, sw_size) != (ssize_t)sw_size) {
glibtop_warn_io_r (server, "kvm_read (*swdevt)"); glibtop_warn_io_r (server, "kvm_read (*swdevt)");
return; return -1;
} }
perdev = glibtop_malloc (nswdev * sizeof (*perdev)); 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, if (kvm_read (server->machine.kd, (int) swapptr, &head,
sizeof (struct rlist)) != sizeof (struct rlist)) { sizeof (struct rlist)) != sizeof (struct rlist)) {
glibtop_warn_io_r (server, "kvm_read (swapptr)"); glibtop_warn_io_r (server, "kvm_read (swapptr)");
return; return -1;
} }
top = head.rl_end; 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, if (kvm_read (server->machine.kd, nlst[0].n_value,
&swap, sizeof (swap)) != sizeof (swap)) { &swap, sizeof (swap)) != sizeof (swap)) {
glibtop_warn_io_r (server, "kvm_read (swap)"); glibtop_warn_io_r (server, "kvm_read (swap)");
return; return -1;
} }
buf->flags = _glibtop_sysdeps_swap; buf->flags = _glibtop_sysdeps_swap;
@@ -398,7 +400,7 @@ glibtop_get_swap_p (glibtop *server, glibtop_swap *buf)
nswap = swapctl (SWAP_NSWAP, NULL, 0); nswap = swapctl (SWAP_NSWAP, NULL, 0);
if (nswap < 0) { if (nswap < 0) {
glibtop_warn_io_r (server, "swapctl (SWAP_NSWAP)"); glibtop_warn_io_r (server, "swapctl (SWAP_NSWAP)");
return; return -1;
} }
swaplist = glibtop_calloc_r (server, nswap, sizeof (struct swapent)); 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) { if (swapctl (SWAP_STATS, swaplist, nswap) != nswap) {
glibtop_warn_io_r (server, "swapctl (SWAP_STATS)"); glibtop_warn_io_r (server, "swapctl (SWAP_STATS)");
glibtop_free_r (server, swaplist); glibtop_free_r (server, swaplist);
return; return -1;
} }
for (i = 0; i < nswap; i++) { for (i = 0; i < nswap; i++) {
@@ -423,4 +425,6 @@ glibtop_get_swap_p (glibtop *server, glibtop_swap *buf)
buf->total = inuse + avail; buf->total = inuse + avail;
#endif #endif
return 0;
} }

View File

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