IO-FD

 view release on metacpan or  search on metacpan

FD.xs  view on Meta::CPAN

	
	INIT:
		SV *irs;
		int ret;
		int count;
		SV* buffer;
		char *buf;
		int do_loop=1;

		int tmp;
	PPCODE:
    if(SvOK(fd)&& SvIOK(fd)){
      irs=get_sv("/",0);
      if(irs){
  #Found variable. Read records
        if(SvOK(irs)){
          if(SvROK(irs)){
            //fprintf(stderr, "DOING RECORD READ\n");
            //SLURP RECORDS

            SV* v=SvRV(irs);	//Dereference to get SV

const-xs.inc  view on Meta::CPAN

	dTARGET;
#endif
	STRLEN		len;
        int		type;
	/* IV		iv;	Uncomment this if you need to return IVs */
	/* NV		nv;	Uncomment this if you need to return NVs */
	/* const char	*pv;	Uncomment this if you need to return PVs */
    INPUT:
	SV *		sv;
        const char *	s = SvPV(sv, len);
    PPCODE:
	type = constant(aTHX_ s, len);
      /* Return 1 or 2 items. First is error message, or undef if no error.
           Second, if present, is found value */
        switch (type) {
        case PERL_constant_NOTFOUND:
          sv =
	    sv_2mortal(newSVpvf("%s is not a valid IO::FD macro", s));
          PUSHs(sv);
          break;
        case PERL_constant_NOTDEF:

fallback/const-xs.inc  view on Meta::CPAN

	dTARGET;
#endif
	STRLEN		len;
        int		type;
	/* IV		iv;	Uncomment this if you need to return IVs */
	/* NV		nv;	Uncomment this if you need to return NVs */
	/* const char	*pv;	Uncomment this if you need to return PVs */
    INPUT:
	SV *		sv;
        const char *	s = SvPV(sv, len);
    PPCODE:
	type = constant(aTHX_ s, len);
      /* Return 1 or 2 items. First is error message, or undef if no error.
           Second, if present, is found value */
        switch (type) {
        case PERL_constant_NOTFOUND:
          sv =
	    sv_2mortal(newSVpvf("%s is not a valid IO::FD macro", s));
          PUSHs(sv);
          break;
        case PERL_constant_NOTDEF:

xs-include/file.c  view on Meta::CPAN


		int ret=-1;
		char *path;
		struct stat buf;
		int len;
		long long atime;
		long long mtime;
		long long ctime;
		char scratch[32]; //
    		SV *tmp;
	PPCODE:

		if(SvOK(target) && SvIOK(target)){
			//Integer => always an fstat
			ret=fstat(SvIV(target), &buf);
		}
		else if(SvOK(target)&& SvPOK(target)){
			//String => stat OR lstat
			
			len=SvCUR(target);
			Newx(path, len+1, char); 	//Allocate plus null

xs-include/mkfifo.c  view on Meta::CPAN

SV*
mkfifo(path, ...)
    char *path
    //int mode

		PREINIT:
			int f;
      int mode=0666;	//Default if not provided

		PPCODE:
      if(items==2){
        mode=SvIV(ST(1));
      }
			f=mkfifo(path, mode);
			if(f<0){
				//RETVAL=&PL_sv_undef;
        XSRETURN_UNDEF;
			}
			else{
        if(!(mode & O_CLOEXEC) && (f>PL_maxsysfd)){

xs-include/mkfifoat.pl  view on Meta::CPAN

  $output=qq|
SV*
mkfifoat(fd, path, ...)
    SV *fd
    char *path

		PREINIT:
			int f;
      int mode=0666;	//Default if not provided

		PPCODE:
      if(SvOK(fd) &&SvIOK(fd)){
        if(items >=3){
          mode=SvIV(ST(2));
        }
        f=mkfifoat(SvIV(fd), path, mode);
        if(f<0){
          XSRETURN_UNDEF;
        }
        else{
          if(!(mode & O_CLOEXEC) && (f>PL_maxsysfd)){

xs-include/open.c  view on Meta::CPAN

SV *
openat(dir_fd, path, mode , ...)
  SV* dir_fd;
  char *path;
  int mode;

  PREINIT:
    int f;
    int permissions=0666;

  PPCODE:
			if(items==4){
				permissions=SvIV(ST(3));
			}
      if(SvOK(dir_fd) && SvIOK(dir_fd)){
        f=openat(SvIV(dir_fd), path, mode, permissions);

        if(f<0){
          XSRETURN_UNDEF;
        }
        else{

xs-include/open.c  view on Meta::CPAN


SV *
open(path, mode , ...)
  char *path;
  int mode;

  PREINIT:
    int f;
    int permissions=0666;

  PPCODE:
			if(items==3){
				permissions=SvIV(ST(2));
			}
			f=open(path, mode, permissions);

			if(f<0){
        XSRETURN_UNDEF;
			}
			else{
        if(!(mode & O_CLOEXEC) && (f>PL_maxsysfd)){

xs-include/read.c  view on Meta::CPAN

SV*
sysread(fd, data, len, ...)
    SV* fd;
    SV* data
		size_t len
		INIT:
			ssize_t ret;
			char *buf;
			long offset=0;

    PPCODE:
			//TODO: allow unspecified len and offset

			//grow scalar to fit potental read
      if(SvOK(fd) && SvIOK(fd)){
        if(SvREADONLY(data)){
            Perl_croak(aTHX_ "%s", PL_no_modify);
        }
        if(items >=4 ){
          //len=SvIOK(ST(2))?SvIV(ST(2)):0;
          offset=SvIOK(ST(3))?SvIV(ST(3)):0;

xs-include/read.c  view on Meta::CPAN

pread(fd, data, len, offset)
  SV *fd;
  SV *data;
  size_t len
  long offset;

		INIT:
			ssize_t ret;
			char *buf;

    PPCODE:
			//TODO: allow unspecified len and offset

			//grow scalar to fit potental read
      if(SvOK(fd) && SvIOK(fd)){
        if(SvREADONLY(data)){
            Perl_croak(aTHX_ "%s", PL_no_modify);
        }

        buf = SvPOK(data) ? SvGROW(data, len+1) : 0;

xs-include/read.c  view on Meta::CPAN

sysread3(fd, data, len)
		SV *fd;
		SV* data
		size_t len

		INIT:
			ssize_t ret;
			char *buf;
			long offset;

		PPCODE:
    if(SvOK(fd) &&SvIOK(fd)){
      if(SvREADONLY(data)){
        Perl_croak(aTHX_ "%s", PL_no_modify);
      }
			size_t data_len=SvCUR(data);

			//fprintf(stderr, "Length of buffer is: %d\n", data_len);
			//fprintf(stderr, "Length of request is: %d\n",len);

			buf = SvPOK(data) ? SvGROW(data,len+1) : 0;

xs-include/read.c  view on Meta::CPAN

sysread4(fd, data, len, offset)
    SV* fd;
    SV* data
    size_t len
		long offset

		INIT:
			ssize_t ret;
			char *buf;

      PPCODE:
      if(SvOK(fd) &&SvIOK(fd)){
        if(SvREADONLY(data)){
          Perl_croak(aTHX_ "%s", PL_no_modify);
        }

#grow scalar to fit potental read
        long data_len=sv_len(data);
        long request_len;
        if(offset<0){
          offset=data_len-offset;

xs-include/sendfile.pl  view on Meta::CPAN

  SV * source
  SV * len 
  SV * offset

  INIT:

    off_t l;
	  off_t o;
    int ret;

  PPCODE:
    if(SvOK(socket) && SvIOK(socket) && SvOK(source) && SvIOK(source)){
        l=SvIV(len);
	o=SvIV(offset);
#if defined(IO_FD_OS_DARWIN)
        ret=sendfile(SvIV(source),SvIV(socket),SvIV(offset),&l, NULL, 0);
#endif
#if defined(IO_FD_OS_BSD)
        ret=sendfile(SvIV(source),SvIV(socket),SvIV(offset),l, NULL, 0,0);
#endif
#if defined(IO_FD_OS_LINUX)

xs-include/socket.c  view on Meta::CPAN


SV *
listen(listener,backlog)
	SV * listener;
	int backlog;


	INIT:
		int ret;

	PPCODE:
    if(SvOK(listener) && SvIOK(listener)){
		ret=listen(SvIV(listener), backlog);

		if(ret<0){
			//RETVAL=&PL_sv_undef;
      XSRETURN_UNDEF;
		}
		else{
		  //RETVAL=newSViv(ret+1);
      XSRETURN_IV(ret+1);

xs-include/socket.c  view on Meta::CPAN

		SV *new_fd=NULL;
		unsigned int len=sizeof(struct sockaddr_storage);

		int count=0;
#if defined(IO_FD_OS_LINUX) 
		int flags;
#endif



	PPCODE:

    if(SvOK(listen_fd) && SvIOK(listen_fd)){
#if defined(IO_FD_OS_LINUX) 
		while((ret=accept4(SvIV(listen_fd),accept_multiple_next_buf, &len,SOCK_NONBLOCK))>=0){
			//fcntl(ret, F_SETFL, O_NONBLOCK);
#endif
#if defined(IO_FD_OS_DARWIN)  || defined(IO_FD_OS_BSD)
		while((ret=accept(SvIV(listen_fd),accept_multiple_next_buf, &len))>=0){
#endif
      if(ret>PL_maxsysfd){

xs-include/socket.c  view on Meta::CPAN

	OUTPUT:
		RETVAL
	
#SOCKATMARK
##########
SV*
sockatmark(fd)
	SV *fd;
	INIT:
		int ret;
	PPCODE:
		if(SvOK(fd)&&SvIOK(fd)){
			ret=sockatmark(SvIV(fd));
			if(ret<0){
				XSRETURN_UNDEF;
			}
			else{
				XSRETURN_IV(ret);
			}

		}

xs-include/socket.c  view on Meta::CPAN

		RETVAL

void
shutdown(fd, how)
	SV *fd
	int how

	INIT:

	  int ret;
	PPCODE:
  if(SvOK(fd)&& SvIOK(fd)){ 
    ret=shutdown(SvIV(fd), how);

    if(ret<0){
      XSRETURN_UNDEF;
    }
    else{
      mXPUSHs(newSViv(1));
      XSRETURN(1);
    }

xs-include/temp.c  view on Meta::CPAN


	INIT:
		int ret;
		SV *path_sv;
		char *path;
		int len=0;
		int min_ok=1;
    ssize_t bufsize,outsize;
    char proc[MAXPATHLEN];

	PPCODE:
		len=strlen(template);
		if(len<6){
			Perl_croak(aTHX_ "The template must end with at least 6 'X' characters");
		}

		for(int i=1; i<=6; i++){
			min_ok=min_ok&&(template[len-i]=='X');
		}
		if(!min_ok){
			Perl_croak(aTHX_ "The template must end with at least 6 'X' characters");

xs-include/temp.c  view on Meta::CPAN


SV*
mktemp(template)
	char *template

	INIT:
		char *ret;
		char *buf;
		int len=0;
		int min_ok=1;
	PPCODE:
		len=strlen(template);
		if(len<6){
			Perl_croak(aTHX_ "The template must end with at least 6 'X' characters");
		}

		for(int i=1; i<=6; i++){
			min_ok=min_ok&&(template[len-i]=='X');
		}

		if(!min_ok){

xs-include/write.c  view on Meta::CPAN

syswrite(fd,data, ...)
	SV *fd
	SV* data

	INIT:
		ssize_t ret;
		char *buf;
		STRLEN max;//=SvCUR(data);
		size_t len;
		long offset;
	PPCODE:
    if(!SvOK(data)){
     Perl_warn(aTHX_ "%s", "IO::FD::syswrite called with use of uninitialized value");
     XSRETURN_IV(0);
    }
    max=SvCUR(data);
		if(items >=4 ){
			//length and  Offset provided
			len=SvIOK(ST(2))?SvIV(ST(2)):0;
			offset=SvIOK(ST(3))?SvIV(ST(3)):0;
			

xs-include/write.c  view on Meta::CPAN

pwrite(fd, data, len, offset)
	SV *fd
	SV* data
  size_t len;
  long offset;

	INIT:
		ssize_t ret;
		char *buf;
		STRLEN max;//=SvCUR(data);
	PPCODE:
    if(!SvOK(data)){
     Perl_warn(aTHX_ "%s", "IO::FD::pwrite called with use of uninitialized value");
     XSRETURN_IV(0);
    }
    max=SvCUR(data);

    //Ensure we don't attempt to write memory we don't have!
    len= max<len?max:len;
    if(SvOK(fd) && SvIOK(fd)){
      

xs-include/write.c  view on Meta::CPAN


SV*
syswrite2(fd,data)
	SV* fd
	SV* data

	INIT:
		ssize_t ret;
		char *buf;
		size_t len;
	PPCODE:

    if(SvOK(fd) && SvIOK(fd)){
      if(!SvOK(data)){
        Perl_warn(aTHX_ "%s", "IO::FD::syswrite called with use of uninitialized value");
        XSRETURN_IV(0);
      }
      len=SvPOK(data)?SvCUR(data):0;
      //TODO: fix negative offset processing
      //TODO: allow unspecified len and offset

xs-include/write.c  view on Meta::CPAN

syswrite3(fd,data,len)
	SV* fd
	SV* data
	size_t len

	INIT:
		ssize_t ret;
		char *buf;
		STRLEN max;//=SvCUR(data);
		long offset=0;
	PPCODE:

    if(SvOK(fd) && SvIOK(fd)){
      if(!SvOK(data)){
        Perl_warn(aTHX_ "%s", "IO::FD::syswrite called with use of uninitialized value");
        XSRETURN_IV(0);
      }
      //TODO: fix negative offset processing
      //TODO: allow unspecified len and offset

      //fprintf(stderr,"Input size: %zu\n",SvCUR(data));

xs-include/write.c  view on Meta::CPAN

syswrite4(fd,data,len,offset)
	SV* fd
	SV* data
	size_t len
	long offset

	INIT:
		ssize_t ret;
		char *buf;
		STRLEN max;//=SvCUR(data);
	PPCODE:

		//TODO: fix negative offset processing
		//TODO: allow unspecified len and offset

    if(SvOK(fd) && SvIOK(fd)){
      if(!SvOK(data)){
        Perl_warn(aTHX_ "%s", "IO::FD::syswrite called with use of uninitialized value");
        XSRETURN_IV(0);
      }
      //fprintf(stderr,"Input size: %zu\n",SvCUR(data));



( run in 2.228 seconds using v1.01-cache-2.11-cpan-71847e10f99 )