Dmitry V. Levin
82a528d96f
* configure.ac (AC_CHECK_MEMBERS): Check for struct sysinfo.totalhigh, struct sysinfo.freehigh, and struct sysinfo.mem_unit. * sysinfo.c (sys_sysinfo): Treat failed umove() call as syserror(). Print totalhigh, freehigh, and mem_unit members when struct sysinfo supports them.
58 lines
1.0 KiB
C
58 lines
1.0 KiB
C
#include "defs.h"
|
|
#include <sys/sysinfo.h>
|
|
|
|
int
|
|
sys_sysinfo(struct tcb *tcp)
|
|
{
|
|
struct sysinfo si;
|
|
|
|
if (entering(tcp))
|
|
return 0;
|
|
|
|
if (syserror(tcp) || !verbose(tcp) ||
|
|
umove(tcp, tcp->u_arg[0], &si) < 0) {
|
|
tprintf("%#lx", tcp->u_arg[0]);
|
|
} else {
|
|
tprintf("{uptime=%lu"
|
|
", loads=[%lu, %lu, %lu]"
|
|
", totalram=%lu"
|
|
", freeram=%lu"
|
|
", sharedram=%lu"
|
|
", bufferram=%lu"
|
|
", totalswap=%lu"
|
|
", freeswap=%lu"
|
|
", procs=%u"
|
|
#ifdef HAVE_STRUCT_SYSINFO_TOTALHIGH
|
|
", totalhigh=%lu"
|
|
#endif
|
|
#ifdef HAVE_STRUCT_SYSINFO_FREEHIGH
|
|
", freehigh=%lu"
|
|
#endif
|
|
#ifdef HAVE_STRUCT_SYSINFO_MEM_UNIT
|
|
", mem_unit=%u"
|
|
#endif
|
|
"}",
|
|
si.uptime
|
|
, si.loads[0], si.loads[1], si.loads[2]
|
|
, si.totalram
|
|
, si.freeram
|
|
, si.sharedram
|
|
, si.bufferram
|
|
, si.totalswap
|
|
, si.freeswap
|
|
, (unsigned) si.procs
|
|
#ifdef HAVE_STRUCT_SYSINFO_TOTALHIGH
|
|
, si.totalhigh
|
|
#endif
|
|
#ifdef HAVE_STRUCT_SYSINFO_FREEHIGH
|
|
, si.freehigh
|
|
#endif
|
|
#ifdef HAVE_STRUCT_SYSINFO_MEM_UNIT
|
|
, si.mem_unit
|
|
#endif
|
|
);
|
|
}
|
|
|
|
return 0;
|
|
}
|