PerlIO-Util
view release on metacpan or search on metacpan
PerlIO-Util.xs view on Meta::CPAN
sv_catpvf(sv, "(%" IVdf "/%" IVdf ")",
(IV)PerlIO_get_cnt(f),
(IV)PerlIO_get_bufsiz(f));
}
PutFlag(RDBUF);
if(IOLflag(f, PERLIO_F_RDBUF)){
sv_catpvf(sv, "(%" IVdf "/%" IVdf ")",
(IV)PerlIO_get_cnt(f),
(IV)PerlIO_get_bufsiz(f));
}
PutFlag(LINEBUF);
PutFlag(TEMP);
PutFlag(OPEN);
PutFlag(FASTGETS);
PutFlag(TTY);
PutFlag(NOTREG);
sv_catpvs(sv, "\n");
if( strEQ(PerlIOBase(f)->tab->name, "tee") ){
PerlIO* const teeout = PerlIOTee_teeout(aTHX_ f);
SV* const t = PerlIOUtil_inspect(aTHX_ teeout, level+1);
sv_catsv(sv, t);
SvREFCNT_dec(t);
}
f = PerlIONext(f);
}
return sv;
}
void
PerlIOUtil_warnif(pTHX_ U32 const category, const char* const fmt, ...){
if(ckWARN(category)){
va_list args;
va_start(args, fmt);
vwarner(category, fmt, &args);
va_end(args);
}
}
MODULE = PerlIO::Util PACKAGE = PerlIO::Util
PROTOTYPES: DISABLE
BOOT:
PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_flock));
PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_creat));
PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_excl));
PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_tee));
PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_dir));
PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_reverse));
void
known_layers(...)
PREINIT:
const PerlIO_list_t* const layers = PL_known_layers;
int i;
PPCODE:
EXTEND(SP, layers->cur);
for(i = 0; i < layers->cur; i++){
SV* const name = newSVpv( LayerFetch(layers, i)->name, 0);
PUSHs( sv_2mortal(name) );
}
XSRETURN(layers->cur);
SV*
_gensym_ref(SV* pkg, SV* name)
PREINIT:
STRLEN len;
const char* pv;
GV* const gv = (GV*)newSV(0);
CODE:
pv = SvPV_const(name, len);
/* see also pp_rv2gv() in pp.c */
gv_init(gv, gv_stashsv(pkg, TRUE), pv, len, GV_ADD);
RETVAL = newRV_noinc((SV*)gv);
sv_bless(RETVAL, gv_stashpvs("IO::Handle", TRUE));
OUTPUT:
RETVAL
MODULE = PerlIO::Util PACKAGE = IO::Handle
#define undef (&PL_sv_undef)
void
push_layer(filehandle, layer, arg = undef)
PerlIO* filehandle
SV* layer
SV* arg
PREINIT:
PerlIO_funcs* tab;
const char* laypv;
STRLEN laylen;
PPCODE:
laypv = SvPV_const(layer, laylen);
if(laypv[0] == ':'){ /* ignore a layer prefix */
laypv++;
laylen--;
}
tab = PerlIO_find_layer(aTHX_ laypv, laylen, TRUE);
if(tab){
if(!PerlIO_push(aTHX_ filehandle, tab, NULL, arg)){
Perl_croak(aTHX_ "push_layer() failed: %s",
PerlIOValid(filehandle)
? Strerror(errno)
: "Invalid filehandle");
}
}
else{
Perl_croak(aTHX_ "Unknown PerlIO layer \"%.*s\"",
(int)laylen, laypv);
}
XSRETURN(1); /* returns self */
void
pop_layer(filehandle)
PerlIO* filehandle
PREINIT:
const char* popped_layer;
PPCODE:
if(!PerlIOValid(filehandle)) XSRETURN_EMPTY;
popped_layer = PerlIOBase(filehandle)->tab->name;
PerlIO_flush(filehandle);
PerlIO_pop(aTHX_ filehandle);
if(GIMME_V != G_VOID){
XSRETURN_PV(popped_layer);
}
MODULE = PerlIO::Util PACKAGE = IO::Handle PREFIX = perlio_
SV*
perlio_inspect(f)
PerlIO* f
( run in 0.799 second using v1.01-cache-2.11-cpan-5511b514fd6 )