Solaris-loadavg

 view release on metacpan or  search on metacpan

loadavg.xs  view on Meta::CPAN


static double
constant(char *name, int len, int arg)
{
    errno = 0;
    if (0 + 8 >= len ) {
	errno = EINVAL;
	return 0;
    }
    switch (name[0 + 8]) {
    case '1':
	if (!strnEQ(name + 0,"LOADAVG_", 8))
	    break;
	return constant_LOADAVG_1(name, len, arg);
    case '5':
	if (strEQ(name + 0, "LOADAVG_5MIN")) {	/*  removed */
#ifdef LOADAVG_5MIN
	    return LOADAVG_5MIN;
#else
	    goto not_there;
#endif
	}
    case 'N':
	if (strEQ(name + 0, "LOADAVG_NSTATS")) {	/*  removed */
#ifdef LOADAVG_NSTATS
	    return LOADAVG_NSTATS;
#else
	    goto not_there;
#endif
	}
    }
    errno = EINVAL;
    return 0;

not_there:
    errno = ENOENT;
    return 0;
}

MODULE = Solaris::loadavg		PACKAGE = Solaris::loadavg		

double
constant(sv,arg)
    PREINIT:
	STRLEN		len;
    INPUT:
	SV *		sv
	char *		s = SvPV(sv, len);
	int		arg
    CODE:
	RETVAL = constant(s,len,arg);
    OUTPUT:
	RETVAL

void
loadavg(nelem=LOADAVG_NSTATS)
   int nelem;
PREINIT:
   double *loadavg;
   int     rc, i;
PPCODE:
   if (nelem > 3 || nelem < 1)
      croak("invalid nelem (%d)", nelem);
   New(0, loadavg, sizeof(double)*nelem, double);
   if ((rc = getloadavg(loadavg, nelem)) != nelem)
      croak("getloadavg failed (%d)", rc);
   EXTEND(SP, nelem);
   for(i=0; i<nelem; i++)
      PUSHs(sv_2mortal(newSVnv(loadavg[i])));



( run in 2.262 seconds using v1.01-cache-2.11-cpan-5511b514fd6 )