Example #1
0
/*
 *  call-seq:
 *     OCI8::Math.tanh()    -> oranumber
 *
 *  Computes the hyperbolic tangent of <i>x</i> (expressed in
 *  radians).
 */
static VALUE omath_tanh(VALUE obj, VALUE num)
{
    OCIError *errhp = oci8_errhp;
    OCINumber n;
    OCINumber r;

    chkerr(OCINumberHypTan(errhp, TO_OCINUM(&n, num, errhp), &r));
    return oci8_make_ocinumber(&r, errhp);
}
Example #2
0
/* construct an ruby object(OCI::Number) from C structure (OCINumber). */
VALUE oci8_make_ocinumber(OCINumber *s, OCIError *errhp)
{
    VALUE obj;
    OCINumber *d;

    obj = Data_Make_Struct(cOCINumber, OCINumber, NULL, xfree, d);
    chkerr(OCINumberAssign(errhp, s, d));
    return obj;
}
Example #3
0
int redis_flush(void)
{
	redisReply *reply = (redisReply*) redisCommand(rctx, "FLUSHDB");
	if (chkerr(reply)) {
		return -1;
	}
	freeReplyObject(reply);
	return 0;
}
Example #4
0
/*
 *  call-seq:
 *     OCI8::Math.tan(x)    -> oranumber
 *
 *  Returns the tangent of <i>x</i> (expressed in radians).
 */
static VALUE omath_tan(VALUE obj, VALUE radian)
{
    OCIError *errhp = oci8_errhp;
    OCINumber r;
    OCINumber rv;

    chkerr(OCINumberTan(errhp, TO_OCINUM(&r, radian, errhp), &rv));
    return oci8_make_ocinumber(&rv, errhp);
}
gnutls_x509_crt_t *gnutls::credentials::callbackObj
::init_certs(std::list<x509::crt> &x509_cert)

{
	gnutls_x509_crt_t *certs=(gnutls_x509_crt_t *)
		gnutls_malloc(sizeof(gnutls_x509_crt_t) *
			      x509_cert.size());

	size_t n=0;

	try {
		std::list<x509::crt>::iterator
			ccb=x509_cert.begin(),
			cce=x509_cert.end();

		while (ccb != cce)
		{
			datum_t d=(*ccb)->export_cert(GNUTLS_X509_FMT_DER);
			++ccb;

			gnutls_datum_t dd;

			dd.data=&*d->begin();
			dd.size=d->size();

			chkerr(gnutls_x509_crt_init(&certs[n]),
			       "gnutls_x509_crt_init");
			++n;
			chkerr(gnutls_x509_crt_import(certs[n-1], &dd,
						      GNUTLS_X509_FMT_DER),
			       "gnutls_x509_crt_import");
		}
	}
	catch (...)
	{
		while (n)
		{
			gnutls_x509_crt_deinit(certs[--n]);
		}
		gnutls_free(certs);
		throw;
	}
	return certs;
}
Example #6
0
File: redis.c Project: Fale/zmap
int redis_delconf(redisContext* rctx, const char *name)
{
	assert(rctx);
	redisReply *reply = redisCommand(rctx, "DEL %s", name);
	if (chkerr(rctx, reply)) {
		return ZMAP_REDIS_ERROR;
	}
	freeReplyObject(reply);
	return 0;
}
Example #7
0
File: redis.c Project: Fale/zmap
int redis_flush(redisContext* rctx)
{
	assert(rctx);
	redisReply *reply = redisCommand(rctx, "FLUSHDB");
	if (chkerr(rctx, reply)) {
		return ZMAP_REDIS_ERROR;
	}
	freeReplyObject(reply);
	return 0;
}
Example #8
0
/*
 *  call-seq:
 *     onum.truncate     -> integer
 *     onum.truncate(decplace) -> oranumber
 *
 *  Truncates <i>onum</i> to the <code>Integer</code> when no argument.
 *  Truncates <i>onum</i> to a specified decimal place <i>decplace</i> when one argument.
 */
static VALUE onum_trunc(int argc, VALUE *argv, VALUE self)
{
    OCIError *errhp = oci8_errhp;
    VALUE decplace;
    OCINumber r;

    rb_scan_args(argc, argv, "01", &decplace /* 0 */);
    chkerr(OCINumberTrunc(errhp, _NUMBER(self), NIL_P(decplace) ? 0 : NUM2INT(decplace), &r));
    return oci8_make_ocinumber(&r, errhp);
}
Example #9
0
int redis_delconf(const char *name)
{
	assert(rctx);
	redisReply *reply = (redisReply*) redisCommand(rctx, "DEL %s", name);
	if (chkerr(reply)) {
		return -1;
	}
	freeReplyObject(reply);
	return 0;
}
Example #10
0
File: redis.c Project: Fale/zmap
int redis_setconf(redisContext* rctx, const char *name, char *value)
{
	assert(rctx);
	redisReply *reply = redisCommand(rctx, "SET %s %s", name, value);
	if (chkerr(rctx, reply)) {
		return ZMAP_REDIS_ERROR;
	}
	freeReplyObject(reply);
	return 0;
}
Example #11
0
/*
 *  call-seq:
 *     OCI8::Math.asin(x)    -> oranumber
 *
 *  Computes the arc sine of <i>x</i>. Returns 0..PI.
 */
static VALUE omath_asin(VALUE obj, VALUE num)
{
    OCIError *errhp = oci8_errhp;
    OCINumber n;
    OCINumber r;
    sword sign;

    set_oci_number_from_num(&n, num, 1, errhp);
    /* check upper bound */
    chkerr(OCINumberCmp(errhp, &n, &const_p1, &sign));
    if (sign > 0)
        rb_raise(rb_eRangeError, "out of range for asin");
    /* check lower bound */
    chkerr(OCINumberCmp(errhp, &n, &const_m1, &sign));
    if (sign < 0)
        rb_raise(rb_eRangeError, "out of range for asin");
    /* asin */
    chkerr(OCINumberArcSin(errhp, &n, &r));
    return oci8_make_ocinumber(&r, errhp);
}
Example #12
0
File: redis.c Project: Fale/zmap
int redis_existconf(redisContext* rctx, const char *name)
{
	assert(rctx);
	redisReply *reply = redisCommand(rctx, "EXISTS %s", name);
	if (chkerr(rctx, reply)) {
		return ZMAP_REDIS_ERROR;
	}
	int v = reply->integer;
	freeReplyObject(reply);
	return v;
}
Example #13
0
int redis_setconf(const char *name, char *value)
{
	assert(rctx);
	redisReply *reply = (redisReply*) redisCommand(rctx, "SET %s %s",
			name, value);
	if (chkerr(reply)) {
		return -1;
	}
	freeReplyObject(reply);
	return 0;
}
Example #14
0
int redis_existconf(const char *name)
{
	assert(rctx);
	redisReply *reply = (redisReply*) redisCommand(rctx, "EXISTS %s", name);
	if (chkerr(reply)) {
		return -1;
	}
	int v = reply->integer;
	freeReplyObject(reply);
	return v;
}
Example #15
0
int redis_getconf(const char *name, char *buf, size_t maxlen)
{
	assert(rctx);
	redisReply *reply = (redisReply*) redisCommand(rctx, "GET %s", name);
	if (chkerr(reply)) {
		return -1;
	}
	strncpy(buf, reply->str, maxlen);
	freeReplyObject(reply);
	return 0;
}
Example #16
0
File: redis.c Project: Fale/zmap
static int redis_push_one(redisContext *rctx, char *queuename, void *buf,
		size_t len, const char *cmd)
{
	assert(rctx);
	redisReply *reply = redisCommand(rctx, "%s %s %b", cmd, queuename, buf, len);
	if (chkerr(rctx, reply)) {
		return ZMAP_REDIS_ERROR;
	}
	freeReplyObject(reply);
	return ZMAP_REDIS_SUCCESS;
}
Example #17
0
File: redis.c Project: Fale/zmap
int redis_getconf(redisContext* rctx, const char *name, char *buf, size_t maxlen)
{
	assert(rctx);
	redisReply *reply = redisCommand(rctx, "GET %s", name);
	if (chkerr(rctx, reply)) {
		return ZMAP_REDIS_ERROR;
	}
	strncpy(buf, reply->str, maxlen - 1);
	buf[maxlen - 1] = '\0';
	freeReplyObject(reply);
	return 0;
}
Example #18
0
runpcs(runmode,execsig)
{
	INT		rc;
	REG BKPTR	bkpt;
	IF adrflg THEN userpc=dot; FI
	printf("%s: running\n", symfil);

	WHILE --loopcnt>=0
	DO
#ifdef DEBUG
		printf("\ncontinue %x %d\n",userpc,execsig);
#endif
		IF runmode==SINGLE
		THEN delbp(); /* hardware handles single-stepping */
		ELSE /* continuing from a breakpoint is hard */
			IF bkpt=scanbkpt(userpc)
			THEN execbkpt(bkpt,execsig); execsig=0;
			FI
			setbp();
		FI
		ptrace(runmode,pid,userpc,execsig);
		bpwait(); chkerr(); execsig=0; delbp(); readregs();

		IF signo==0
		ANDF runmode != SINGLE
#ifdef mc68000
		ANDF (bkpt=scanbkpt(userpc - 2))	/* argh */
#else
		ANDF (bkpt=scanbkpt(userpc))
#endif
		THEN /* stopped by BPT instruction */
#ifdef DEBUG
			printf("\n BPT code; '%s'%o'%o'%d",
				bkpt->comm,bkpt->comm[0],EOR,bkpt->flag);
#endif
			dot=bkpt->loc;
			userpc = dot;
			*(ADDR *)(((ADDR)&u)+PC-getradj(1)) = userpc;
			IF bkpt->flag==BKPTEXEC
			ORF ((bkpt->flag=BKPTEXEC)
				ANDF bkpt->comm[0]!=EOR
				ANDF command(bkpt->comm,':')
				ANDF --bkpt->count)
			THEN execbkpt(bkpt,execsig); execsig=0; loopcnt++;
			ELSE bkpt->count=bkpt->initcnt; rc=1;
			FI
		ELSE execsig=signo; rc=0;
		FI
	OD
	return(rc);
}
Example #19
0
/* Converts to BigDecimal via number in scientific notation */
static VALUE onum_to_d_real(OCINumber *num, OCIError *errhp)
{
    char buf[64];
    ub4 buf_size = sizeof(buf);
    const char *fmt = "FM9.99999999999999999999999999999999999999EEEE";

    if (!cBigDecimal) {
        rb_require("bigdecimal");
        cBigDecimal = rb_const_get(rb_cObject, id_BigDecimal);
    }
    chkerr(OCINumberToText(errhp, num, (const oratext *)fmt, strlen(fmt),
                           NULL, 0, &buf_size, TO_ORATEXT(buf)));
    return rb_funcall(rb_cObject, id_BigDecimal, 1, rb_usascii_str_new(buf, buf_size));
}
Example #20
0
/*
 *  call-seq:
 *     onum.round      -> integer
 *     onum.round(decplace) -> oranumber
 *
 *  Rounds <i>onum</i> to the nearest <code>Integer</code> when no argument.
 *  Rounds <i>onum</i> to a specified decimal place <i>decplace</i> when one argument.
 *
 *   OraNumber.new(1.234).round(1)  #=> 1.2
 *   OraNumber.new(1.234).round(2)  #=> 1.23
 *   OraNumber.new(1.234).round(3)  #=> 1.234
 */
static VALUE onum_round(int argc, VALUE *argv, VALUE self)
{
    OCIError *errhp = oci8_errhp;
    VALUE decplace;
    OCINumber r;

    rb_scan_args(argc, argv, "01", &decplace /* 0 */);
    chkerr(OCINumberRound(errhp, _NUMBER(self), NIL_P(decplace) ? 0 : NUM2INT(decplace), &r));
    if (argc == 0) {
        return oci8_make_integer(&r, errhp);
    } else {
        return oci8_make_ocinumber(&r, errhp);
    }
}
Example #21
0
VALUE oci8_make_ociinterval_ds(OCIInterval *s)
{
    sb4 day;
    sb4 hour;
    sb4 minute;
    sb4 sec;
    sb4 fsec;

    chkerr(OCIIntervalGetDaySecond(oci8_envhp, oci8_errhp, &day, &hour, &minute, &sec, &fsec, s));
    return rb_ary_new3(5,
                       INT2FIX(day), INT2FIX(hour),
                       INT2FIX(minute), INT2FIX(sec),
                       INT2FIX(fsec));
}
Example #22
0
int main(void) {
  char ***l1 = NULL, *fv[3] ,dir[50] ,c;
  int vc, bg, id, p[2], d;

  signal(SIGINT, SIG_IGN);	signal(SIGQUIT,SIG_IGN);

  while (1) {
    getcwd(dir,50); write(1,dir,strlen(dir)); write(1," $ ",d = bg = 3);
    for (;bg; fv[bg] = NULL) realloc(fv[--bg],0); size(l1,4,0,NULL);
    for (vc = p[0] = 0; read(0,&c,1) && (c != '\n');)
    switch(c) {
     case '<': d = 0; break;
     case '>': d = 1; break;
     case '|': if (l2) {vc++; p[0] = 0;} d = 3; break;
     case '&': if (d < 3) d++; else bg = 1; break;
     case ' ': if (d < 3) {if (fv[d]) d = 3;} else if (l2 && l3) p[0]++; break;
     default:  if (d < 3) {if (!fv[d]) size(fv[d],1,0,'\0');
                  size(fv[d],(id=strlen(fv[d]))+2,id,c); fv[d][id+1]='\0';}
               else { if (!l2) {size(l1,vc*4+8,vc+1,NULL); size(l2,4,0,NULL);}
                  if (!l3) {size(l2,p[0]*4+8,p[0]+1,NULL); size(l3,1,0,'\0');}
                  size(l3,(id=strlen(l3))+2,id,c); l3[id+1] = '\0';}}

    for (vc = 0; l2;) {
      if (!vc) d = dup(0);
      if (l1[vc+1]) chkerr(pipe(p),"pipe");
      if (!strcmp(l2[0],"exit")) exit(0);
      if (!strcmp(l2[0],"cd")) {if (chdir(l2[1]) < 0) chdir(getenv("HOME"));}
      else {if (!(id = fork())) {
	       if (fv[0] && !vc) redir(0,O_RDONLY) else mvdesc(0,d);
	       if (fv[1]) redir(1,O_CREAT|O_WRONLY|O_TRUNC);
	       if (fv[2]) redir(2,O_CREAT|O_WRONLY|O_TRUNC);
	       if (l1[vc+1]) {mvdesc(1,p[1]); close(p[0]);}
	       if (!bg) {signal(SIGINT,SIG_DFL); signal(SIGQUIT,SIG_DFL);}
	       chkerr(execvp(l2[0],l2),"exec");}
            if (!l1[vc+1] && !bg) while (wait(NULL) != id);}
      for (id = 0; l2[id]; realloc(l2[id++],0)); realloc(l2,0);
      close(d); if (l1[++vc]) {d = dup(p[0]); close(p[0]); close(p[1]);}}}}
Example #23
0
OCIInterval *oci8_set_ociinterval_ym(OCIInterval *intvl, VALUE val)
{
    sb4 year;
    sb4 month;

    Check_Type(val, T_ARRAY);
    if (RARRAY_LEN(val) != 2) {
        rb_raise(rb_eRuntimeError, "invalid array size %ld", RARRAY_LEN(val));
    }
    year = NUM2INT(RARRAY_AREF(val, 0));
    month = NUM2INT(RARRAY_AREF(val, 1));
    chkerr(OCIIntervalSetYearMonth(oci8_envhp, oci8_errhp,
                                   year, month, intvl));
    return intvl;
}
Example #24
0
/*
 *  call-seq:
 *     onum.to_char(fmt = nil, nls_params = nil)  -> string
 *
 *  Returns a string containing a representation of self.
 *  <i>fmt</i> and <i>nls_params</i> are same meanings with
 *  <code>TO_CHAR</code> of Oracle function.
 */
static VALUE onum_to_char(int argc, VALUE *argv, VALUE self)
{
    OCIError *errhp = oci8_errhp;
    VALUE fmt;
    VALUE nls_params;
    char buf[512];
    ub4 buf_size = sizeof(buf);
    oratext *fmt_ptr;
    oratext *nls_params_ptr;
    ub4 fmt_len;
    ub4 nls_params_len;
    sword rv;

    rb_scan_args(argc, argv, "02", &fmt /* nil */, &nls_params /* nil */);
    if (NIL_P(fmt)) {
        rv = oranumber_to_str(_NUMBER(self), buf, sizeof(buf));
        if (rv > 0) {
            return rb_usascii_str_new(buf, rv);
        }
        oranumber_dump(_NUMBER(self), buf);
        rb_raise(eOCIException, "Invalid internal number format: %s", buf);
    }
    StringValue(fmt);
    fmt_ptr = RSTRING_ORATEXT(fmt);
    fmt_len = RSTRING_LEN(fmt);
    if (NIL_P(nls_params)) {
        nls_params_ptr = NULL;
        nls_params_len = 0;
    } else {
        StringValue(nls_params);
        nls_params_ptr = RSTRING_ORATEXT(nls_params);
        nls_params_len = RSTRING_LEN(nls_params);
    }
    rv = OCINumberToText(errhp, _NUMBER(self),
                         fmt_ptr, fmt_len, nls_params_ptr, nls_params_len,
                         &buf_size, TO_ORATEXT(buf));
    if (rv == OCI_ERROR) {
        sb4 errcode;
        OCIErrorGet(errhp, 1, NULL, &errcode, NULL, 0, OCI_HTYPE_ERROR);
        if (errcode == 22065) {
            /* OCI-22065: number to text translation for the given format causes overflow */
            if (NIL_P(fmt)) /* implicit conversion */
                return rb_usascii_str_new_cstr("overflow");
        }
        chkerr(rv);
    }
    return rb_usascii_str_new(buf, buf_size);
}
Example #25
0
void iostream::switch_mode( void )
{	
	// return immediately if there's an error
	if ( chkerr() ) return;
	
	
	if ( mode == 0 ) {
		// WARNING: when switching from reading to writing, information might be lost forever
		switch ( srct ) {
			case 0:
				fclose( fptr );
				fptr = fopen( ( char* ) source, "wb" );
				break;
			case 1:
			case 2:
				delete( mrdr );
				if ( free_mem_sw )
					free( source ); // see? I've told you so :-)
				mwrt = new abytewriter( srcs );
				break;
			default:
				break;
		}
		mode = 1;
	}
	else {
		// switching from writing to reading is a bit more complicated
		switch ( srct ) {
			case 0:
				fflush( fptr );
				fclose( fptr );
				fptr = fopen( ( char* ) source, "rb" );
				break;
			case 1:
			case 2:
				source = mwrt->getptr();
				srcs   = mwrt->getpos();
				delete( mwrt );
				mrdr = new abytereader( ( unsigned char* ) source, srcs );
				free_mem_sw = true;
				break;
			default:
				break;
		}
		mode = 0;
	}
}
Example #26
0
/*
 *  call-seq:
 *    onum <=> other   -> -1, 0, +1
 *
 *  Returns -1, 0, or +1 depending on whether <i>onum</i> is less than,
 *  equal to, or greater than <i>other</i>. This is the basis for the
 *  tests in <code>Comparable</code>.
 */
static VALUE onum_cmp(VALUE lhs, VALUE rhs)
{
    OCIError *errhp = oci8_errhp;
    OCINumber n;
    sword r;

    /* change to OCINumber */
    if (!set_oci_number_from_num(&n, rhs, 0, errhp))
        return rb_num_coerce_cmp(lhs, rhs, id_cmp);
    /* compare */
    chkerr(OCINumberCmp(errhp, _NUMBER(lhs), &n, &r));
    if (r > 0) {
        return INT2FIX(1);
    } else if (r == 0) {
        return INT2FIX(0);
    } else {
        return INT2FIX(-1);
    }
}
Example #27
0
/* fill C structure (OCINumber) from a string. */
static void set_oci_number_from_str(OCINumber *result, VALUE str, VALUE fmt, VALUE nls_params, OCIError *errhp)
{
    oratext *fmt_ptr;
    oratext *nls_params_ptr;
    ub4 fmt_len;
    ub4 nls_params_len;

    StringValue(str);
    /* set from string. */
    if (NIL_P(fmt)) {
        int rv = oranumber_from_str(result, RSTRING_PTR(str), RSTRING_LEN(str));
        if (rv == ORANUMBER_SUCCESS) {
            return; /* success */
        } else {
            const char *default_msg = NULL;
            switch (rv) {
            case ORANUMBER_INVALID_NUMBER:
                default_msg = "invalid number";
                break;
            case ORANUMBER_NUMERIC_OVERFLOW:
                default_msg = "numeric overflow";
                break;
            }
            oci8_raise_by_msgno(rv, default_msg);
        }
    }
    StringValue(fmt);
    fmt_ptr = RSTRING_ORATEXT(fmt);
    fmt_len = RSTRING_LEN(fmt);
    if (NIL_P(nls_params)) {
        nls_params_ptr = NULL;
        nls_params_len = 0;
    } else {
        StringValue(nls_params);
        nls_params_ptr = RSTRING_ORATEXT(nls_params);
        nls_params_len = RSTRING_LEN(nls_params);
    }
    chkerr(OCINumberFromText(errhp,
                             RSTRING_ORATEXT(str), RSTRING_LEN(str),
                             fmt_ptr, fmt_len, nls_params_ptr, nls_params_len,
                             result));
}
Example #28
0
File: redis.c Project: Fale/zmap
int redis_pull(redisContext* rctx, char *redisqueuename, void *buf,
		int maxload, size_t obj_size, int *numloaded, const char* cmd)
{
	assert(rctx);
	long elems_in_redis = redis_get_sizeof_list(rctx, redisqueuename);
	long num_to_add = MIN(elems_in_redis, maxload);
	log_debug("redis", "redis load called on %s. Transferring %li of %li elements "
			"to in-memory queue.",
			redisqueuename, num_to_add, elems_in_redis);
	for (int i = 0; i < num_to_add; i++) {
		redisAppendCommand(rctx, "%s %s", cmd, redisqueuename);
	}
	for (int i = 0; i < num_to_add; i++) {
		redisReply *reply = NULL;
		int rc = redisGetReply(rctx, (void **) &reply);
		if (chkerr(rctx, reply)) {
			return ZMAP_REDIS_ERROR;
		}
		if (rc != REDIS_OK || reply == NULL) {
			log_error("redis", "unknown error, could not get reply");
			if (reply) {
				freeReplyObject(reply);
			}
			return ZMAP_REDIS_ERROR;
		}
		if (reply->type != REDIS_REPLY_STRING) {
			log_error("redis", "unxpected reply type from redis");
			freeReplyObject(reply);
			return ZMAP_REDIS_ERROR;
		}
		if ((size_t) reply->len != obj_size) {
			freeReplyObject(reply);
			log_error("redis", "response object length mismatch");
			return ZMAP_REDIS_ERROR;
		}
		memcpy((void*)((intptr_t)buf+i*obj_size), reply->str, obj_size);
		freeReplyObject(reply);
		*numloaded = i + 1;
	}
	return ZMAP_REDIS_SUCCESS;
}
Example #29
0
File: redis.c Project: Fale/zmap
static int redis_pull_one(redisContext *rctx, char *queuename, void **buf,
		size_t *len, const char *cmd)
{
	assert(rctx);
	redisReply *reply = redisCommand(rctx, "%s %s", cmd, queuename);
	if (chkerr(rctx, reply)) {
		return ZMAP_REDIS_ERROR;
	}
	if (reply->type == REDIS_REPLY_NIL) {
		freeReplyObject(reply);
		return ZMAP_REDIS_EMPTY;
	}
	assert(reply->type == REDIS_REPLY_STRING);
	*len = reply->len;
	void *temp = (char*) malloc(*len);
	assert(temp);
	*buf = temp;
	memcpy(temp, reply->str, *len);
	freeReplyObject(reply);
	return ZMAP_REDIS_SUCCESS;
}
Example #30
0
OCIInterval *oci8_set_ociinterval_ds(OCIInterval *intvl, VALUE val)
{
    sb4 day;
    sb4 hour;
    sb4 minute;
    sb4 sec;
    sb4 fsec;

    Check_Type(val, T_ARRAY);
    if (RARRAY_LEN(val) != 5) {
        rb_raise(rb_eRuntimeError, "invalid array size %ld", RARRAY_LEN(val));
    }
    day = NUM2INT(RARRAY_AREF(val, 0));
    hour = NUM2INT(RARRAY_AREF(val, 1));
    minute = NUM2INT(RARRAY_AREF(val, 2));
    sec = NUM2INT(RARRAY_AREF(val, 3));
    fsec = NUM2INT(RARRAY_AREF(val, 4));
    chkerr(OCIIntervalSetDaySecond(oci8_envhp, oci8_errhp,
                                   day, hour, minute, sec, fsec, intvl));
    return intvl;
}