Cache-Mmap

 view release on metacpan or  search on metacpan

Mmap.xs  view on Meta::CPAN

	addr=mmap(0,len,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
	if(addr==MAP_FAILED){
	  RETVAL=0;
	}else{
	  SvUPGRADE(var,SVt_PV);
	  SvPVX(var)=(char*)addr;
	  SvCUR_set(var,len);
	  SvLEN_set(var,0);
	  SvPOK_only(var);
	  RETVAL=1;
	}
    OUTPUT:
	RETVAL

int
munmap(var)
	SV *var
    PROTOTYPE: $
    CODE:
	if(munmap((MMAP_RETTYPE)SvPVX(var),SvCUR(var))<0){
	  RETVAL=0;
	}else{
	  SvREADONLY_off(var);
	  SvPVX(var)=0;
	  SvCUR_set(var,0);
	  SvLEN_set(var,0);
	  SvOK_off(var);
	  RETVAL=1;
	}
    OUTPUT:
	RETVAL

int
_lock_xs(fh,off,len,mode)
	FILE *fh
	off_t off
	size_t len
	int mode
	int fd = NO_INIT
	struct flock fl = NO_INIT
    PROTOTYPE: $$$$
    CODE:
	/* XXX Use new perlio stuff to get fd */
	fd=fileno(fh);
	fl.l_whence=SEEK_SET;
	fl.l_start=off;
	fl.l_len=len;
	fl.l_type=mode ? F_WRLCK : F_UNLCK;
	RETVAL=fcntl(fd,F_SETLKW,&fl)>=0;


    /* Define our own utf8::decode(), if we're on perl 5.6 */

MODULE = Cache::Mmap		PACKAGE = utf8

#if (PERL_VERSION == 6)

void
decode(SV *str)
    PROTOTYPE: $
    PPCODE:
	SV *sv=ST(0);
	int RETVAL;

	RETVAL=sv_utf8_decode(sv);
	ST(0)=boolSV(RETVAL);
	sv_2mortal(ST(0));
	XSRETURN(1);

#endif



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