POSIX-Run-Capture

 view release on metacpan or  search on metacpan

Capture.xs  view on Meta::CPAN

				    && SvTYPE(SvRV(val)) == SVt_PVAV) {
					argv = XS_unpack_ARGV(val);
				} else
					croak("argv must be an array ref");
			} else if (strcmp(kw, "env") == 0) {
				if (SvROK(val)
				    && SvTYPE(SvRV(val)) == SVt_PVAV) {
					env = XS_unpack_ARGV(val);
				} else
					croak("env must be an array ref");
			} else if (strcmp(kw, "stdout") == 0
				   || strcmp(kw, "stderr") == 0) {
				cb[kw[3] == 'o' ? 0 : 1] = val;
			} else if (strcmp(kw, "timeout") == 0) {
				if (SvIOK(val)) {
					timeout = SvUV(val);
				} else
					croak("timeout must be a number of seconds");
			} else if (strcmp(kw, "program") == 0) {
				if (SvROK(val))
					croak("program argument is not a scalar");
				else 
					prog = val;
			} else if (strcmp(kw, "input") == 0
				   || strcmp(kw, "stdin") == 0) {
				input = val;
			} else
				croak("unknown keyword argument %s", kw);
		}
	}
        RETVAL = capture_new(prog, argv, env, timeout, cb, input);
  OUTPUT:
        RETVAL

void
capture_DESTROY(cp)
	POSIX::Run::Capture cp;

=head2 $obj->set_argv_ref($aref)

Sets command argument vector. The B<$aref> parameter is an array reference.

This is an auxiliary method. Use B<set_argv> instead.

=cut
	
void
capture_set_argv_ref(cp, argv)
	POSIX::Run::Capture cp;
	ARGV argv;

void
capture_set_env_ref(cp, env)
	POSIX::Run::Capture cp;
	ARGV env;

void
capture_set_program(cp, prog)
	POSIX::Run::Capture cp;
	char *prog = NO_INIT;
  PPCODE:
	if (cp->program != &PL_sv_undef)
		SvREFCNT_dec(cp->program);
	cp->program = ST(1);
        if (cp->program != &PL_sv_undef) {
		SvREFCNT_inc(cp->program);
		cp->rc.rc_program = SvPV_nolen(cp->program);
		cp->flags |= RCF_PROGRAM;
	} else 
		cp->flags &= ~RCF_PROGRAM;

void
capture_set_timeout(cp, timeout)
	POSIX::Run::Capture cp;
	unsigned timeout;
  CODE:
	if (timeout) {
		cp->rc.rc_timeout = timeout;
		cp->flags |= RCF_TIMEOUT;
	} else {
		cp->flags &= ~RCF_TIMEOUT;
	}

void
capture_set_input(cp, inp)
	POSIX::Run::Capture cp;
	SV *inp;
		
ARGV
capture_argv(cp)
	POSIX::Run::Capture cp;
  CODE:
	RETVAL = cp->rc.rc_argv;
  OUTPUT:
        RETVAL

ARGV
capture_env(cp)
	POSIX::Run::Capture cp;
  CODE:
	RETVAL = cp->rc.rc_env;
  OUTPUT:
        RETVAL

void
capture_program(cp)
	POSIX::Run::Capture cp;
  PPCODE:
	if (cp->program == &PL_sv_undef && cp->rc.rc_argv) {
		ST(0) = newSVpv(cp->rc.rc_argv[0], 0);
		sv_2mortal(ST(0));
	} else
		ST(0) = cp->program;
        XSRETURN(1);

unsigned
capture_timeout(cp)
	POSIX::Run::Capture cp;
  CODE:
	RETVAL = (cp->flags & RCF_TIMEOUT) ? cp->rc.rc_timeout : 0;
  OUTPUT:
        RETVAL

int
capture_run(cp)
	POSIX::Run::Capture cp;

int
capture_status(cp)
	POSIX::Run::Capture cp;
  CODE:
	RETVAL = cp->rc.rc_status;
  OUTPUT:
        RETVAL

int
capture_errno(cp)
	POSIX::Run::Capture cp;
  CODE:
	RETVAL = cp->rc.rc_errno;
  OUTPUT:
        RETVAL

size_t
capture_nlines(cp, n)
	POSIX::Run::Capture cp;
	int n;
  CODE:
	if (n != RUNCAP_STDOUT && n != RUNCAP_STDERR) {
		croak("invalid stream number: %d", n);
	}
        RETVAL = cp->rc.rc_cap[n].sc_nlines;
  OUTPUT:
        RETVAL

size_t
capture_length(cp, n)
	POSIX::Run::Capture cp;
	int n;
  CODE:
	if (n != RUNCAP_STDOUT && n != RUNCAP_STDERR) {
		croak("invalid stream number: %d", n);
	}
        RETVAL = cp->rc.rc_cap[n].sc_leng;
  OUTPUT:
        RETVAL
	
char *



( run in 0.491 second using v1.01-cache-2.11-cpan-5511b514fd6 )