Mail-SpamCannibal

 view release on metacpan or  search on metacpan

BDBaccess/CTest.xs  view on Meta::CPAN


MODULE = Mail::SpamCannibal::BDBaccess::CTest	PACKAGE = Mail::SpamCannibal::BDBaccess::CTest

PROTOTYPES: DISABLE

 # first item in list is the program name

int
t_main(...)
    PREINIT:
	STRLEN  len;
	unsigned char * ptr[20];
	int i;
	extern int opterr;
    CODE:
	if (items > 20) {
	    i = 0;  
	} else {
	    for (i=0; i < items; i++)
	    {
		ptr[i] = (unsigned char *)(SvPV(ST(i), len));
	    }
	opterr = 0;
	realMain(items, (char **)ptr);
	}
	RETVAL = i;
    OUTPUT:
	RETVAL

void
t_setport(pnum)
	int pnum
    CODE:
	port = pnum;

void
t_setsig()
    CODE:
	logopen = 0;	/* skip branch in Code	*/
	oflag = 1;	/* print to stdout	*/
	set_signals();

int
t_pidrun()
    CODE:
	RETVAL = (int)pidrun;
    OUTPUT:
	RETVAL

void
t_savpid(path)
	char * path
    CODE:
	savpid(path);

void
t_chk4pid(path)
	char * path
    PREINIT:
	SV * out;
    PPCODE:
	path = chk4pid(path);
	if (path == NULL) {
	  ST(0) = &PL_sv_undef;
	}
	else {
	  out = sv_newmortal();
	  out = newSVpv(path,0);
	  ST(0) = out;
	  XSRETURN(1);
	}

void
t_pidpath()
    PREINIT:
	SV * out;
    PPCODE:
	out = sv_newmortal();
	out = newSVpv(pidpath(),0);
	ST(0) = out;
	XSRETURN(1);

int
t_init(home,...)
	unsigned char * home
    PREINIT:
	STRLEN len;
	int i;
    CODE:
	for(i=1; i<items; i++) {
	  dbtp.dbfile[i-1] = SvPV(ST(i),len);
	}
	RETVAL = dbtp_init(&dbtp,home, -1);
    OUTPUT:
	RETVAL

int
t_dump(which,name)
	int which
	char * name
    CODE:
	RETVAL = mydb_dump(which,name);
    OUTPUT:
	RETVAL

void
t_close()
    CODE:
	dbtp_close(&dbtp);

void
t_get(which, name, addr);
	int which;
	char * name
	unsigned char * addr
    PREINIT:
	SV * out;
	void * data;
    PPCODE:
	if (dbtp_readDB(&dbtp,0, name, addr, 1))
	  XSRETURN_UNDEF;

	if (which)
	  data = myct_getsec();
	else
	  data = myct_getpri();

	if (data == NULL) {
	  ST(0) = &PL_sv_undef;
	}
	else {
	  out = sv_newmortal();
	  if(which) {
	    out = newSVpv((char *)data,0);
	  } 
	  else {
	    out = newSViv(*(I32 *)data);
	  }
	  ST(0) = out;
	}
	XSRETURN(1);

void
t_getrecno(which, name, cursor)
	int which
	char * name
	U32 cursor
    PREINIT:
	SV * netaddr, * tmp;		/* older perl does not know about newSVuv */
    PPCODE:
	cursor = htonl(cursor);
	if (dbtp_readDB(&dbtp,1,name,&cursor,1)) {
	    if(GIMME == G_ARRAY)
		XSRETURN_EMPTY;
	    else
		XSRETURN_UNDEF;
	}
	netaddr = sv_newmortal();
	sv_setpvn(netaddr, (char *)dbtp.keydbt.data, (size_t)dbtp.keydbt.size);
	XPUSHs(netaddr);
	if(GIMME == G_ARRAY) {
	    if (which)
		XPUSHs(sv_2mortal(newSVpv((char *)dbtp.mgdbt.data,(size_t)dbtp.mgdbt.size)));
	    else {
		cursor = ntohl(my_u32(dbtp.mgdbt.data));	/* temp variable	*/
		tmp = newSViv(cursor);
		sv_setuv(tmp,cursor);
		XPUSHs(sv_2mortal(tmp));
	    }
	    XSRETURN(2);
	}
	XSRETURN(1);

void
t_bdberror(status)
	int status
    PPCODE:
	XPUSHs(sv_2mortal(newSVpv(db_strerror(status),0)));
	XSRETURN(1);

void
t_bdbversion()
    PREINIT:
	char version[256];
	int major, minor, patch;
    PPCODE:
	(void)db_version(&major,&minor,&patch);
	(void)sprintf(version,"%d.%d.%d",major,minor,patch);
	XPUSHs(sv_2mortal(newSVpv(version,0)));
	XSRETURN(1);

U32
t_bdbcount(name)
	char * name
    CODE:
	RETVAL = dbtp_statn(&dbtp,name);
    OUTPUT:
	RETVAL

int
t_set_parent(val)
	int val
    CODE:
	RETVAL = parent;
	parent = val;
    OUTPUT:
	RETVAL



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