BSD-Itimer

 view release on metacpan or  search on metacpan

Itimer.xs  view on Meta::CPAN

static double
constant(name, arg)
char *name;
int arg;
{
    errno = 0;
    switch (*name) {
    case 'I':
	if (strEQ(name, "ITIMER_PROF"))
#ifdef ITIMER_PROF
	    return ITIMER_PROF;
#else
	    goto not_there;
#endif
	if (strEQ(name, "ITIMER_REAL"))
#ifdef ITIMER_REAL
	    return ITIMER_REAL;
#else
	    goto not_there;
#endif
	if (strEQ(name, "ITIMER_REALPROF"))
#ifdef ITIMER_REALPROF
	    return ITIMER_REALPROF;
#else
	    goto not_there;
#endif
	if (strEQ(name, "ITIMER_VIRTUAL"))
#ifdef ITIMER_VIRTUAL
	    return ITIMER_VIRTUAL;
#else
	    goto not_there;
#endif
	break;
    }
    errno = EINVAL;
    return 0;

not_there:
    errno = ENOENT;
    return 0;
}

MODULE = BSD::Itimer		PACKAGE = BSD::Itimer

PROTOTYPES: enable

double
constant(name,arg)
	char *		name
	int		arg


MODULE = BSD::Itimer		PACKAGE = BSD::Itimer	PREFIX=bsd_

void
bsd_getitimer(which)
	int	which
PREINIT:
	struct itimerval it;
	int err;
PPCODE:
	err = getitimer(which, &it);
	if(err < 0) {
	    XSRETURN_EMPTY;
        }
	EXTEND(sp, 4);
	PUSHs(sv_2mortal(newSViv(it.it_interval.tv_sec)));
	PUSHs(sv_2mortal(newSViv(it.it_interval.tv_usec)));
	PUSHs(sv_2mortal(newSViv(it.it_value.tv_sec)));
	PUSHs(sv_2mortal(newSViv(it.it_value.tv_usec)));

void
bsd_setitimer(which, ival_sec, ival_usec, val_sec, val_usec)
	int	which
	int	ival_sec
	int	ival_usec
	int	val_sec
	int	val_usec
PREINIT:
	struct itimerval setiv, getiv;
	int err;
PPCODE:
	setiv.it_interval.tv_sec = ival_sec;
	setiv.it_interval.tv_usec = ival_usec;
	setiv.it_value.tv_sec = val_sec;
	setiv.it_value.tv_usec = val_usec;
	err = setitimer(which, &setiv, &getiv);
	if(err < 0) {
	    XSRETURN_EMPTY;
        }
	EXTEND(sp, 4);
	PUSHs(sv_2mortal(newSViv(getiv.it_interval.tv_sec)));
	PUSHs(sv_2mortal(newSViv(getiv.it_interval.tv_usec)));
	PUSHs(sv_2mortal(newSViv(getiv.it_value.tv_sec)));
	PUSHs(sv_2mortal(newSViv(getiv.it_value.tv_usec)));



( run in 1.349 second using v1.01-cache-2.11-cpan-71847e10f99 )