#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include <string.h>
#include <sys/param.h>
#include <sys/resource.h>
#include <sys/sysctl.h>
#if defined(__OpenBSD__)
#include <uvm/uvm_param.h>
#elif defined(__FreeBSD__) || defined(__DragonFly__)
#include <vm/vm_param.h>
#endif
MODULE = Unix::Uptime::BSD::XS PACKAGE = Unix::Uptime::BSD::XS
void
sysctl_kern_boottime()
INIT:
int mib[2] = { CTL_KERN, KERN_BOOTTIME };
struct timeval boottime;
size_t len = sizeof(boottime);
PPCODE:
if (-1 == sysctl(mib, 2, &boottime, &len, NULL, 0)) {
croak("sysctl: %s", strerror(errno));
}
EXTEND(SP, 2);
PUSHs(sv_2mortal(newSViv(boottime.tv_sec)));
PUSHs(sv_2mortal(newSViv(boottime.tv_usec)));
void
sysctl_vm_loadavg()
INIT:
int mib[2] = { CTL_VM, VM_LOADAVG };
struct loadavg load;
size_t len = sizeof(load);
PPCODE:
if (-1 == sysctl(mib, 2, &load, &len, NULL, 0)) {
croak("sysctl: %s", strerror(errno));
}
EXTEND(SP, 4);
PUSHs(sv_2mortal(newSViv(load.ldavg[0])));
PUSHs(sv_2mortal(newSViv(load.ldavg[1])));
PUSHs(sv_2mortal(newSViv(load.ldavg[2])));
PUSHs(sv_2mortal(newSViv(load.fscale)));