InputStream handle
SV * pos
CODE:
- if (handle)
+ char *p;
+ if (handle && (p = SvPVx(pos, na)) && na == sizeof(Fpos_t))
#ifdef PerlIO
- RETVAL = PerlIO_setpos(handle, (Fpos_t*)SvPVX(pos));
+ RETVAL = PerlIO_setpos(handle, (Fpos_t*)p);
#else
- RETVAL = fsetpos(handle, (Fpos_t*)SvPVX(pos));
+ RETVAL = fsetpos(handle, (Fpos_t*)p);
#endif
else {
RETVAL = -1;
MODULE = IO PACKAGE = IO::File PREFIX = f
-OutputStream
+SV *
new_tmpfile(packname = "IO::File")
char * packname
+ PREINIT:
+ OutputStream fp;
+ GV *gv;
CODE:
#ifdef PerlIO
- RETVAL = PerlIO_tmpfile();
+ fp = PerlIO_tmpfile();
#else
- RETVAL = tmpfile();
+ fp = tmpfile();
#endif
- OUTPUT:
- RETVAL
+ gv = (GV*)SvREFCNT_inc(newGVgen(packname));
+ hv_delete(GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv), G_DISCARD);
+ if (do_open(gv, "+>&", 3, FALSE, 0, 0, fp)) {
+ ST(0) = sv_2mortal(newRV((SV*)gv));
+ sv_bless(ST(0), gv_stashpv(packname, TRUE));
+ SvREFCNT_dec(gv); /* undo increment in newRV() */
+ }
+ else {
+ ST(0) = &sv_undef;
+ SvREFCNT_dec(gv);
+ }
MODULE = IO PACKAGE = IO::Handle PREFIX = f
OUTPUT:
RETVAL
+int
+untaint(handle)
+ SV * handle
+ CODE:
+#ifdef IOf_UNTAINT
+ IO * io;
+ io = sv_2io(handle);
+ if (io) {
+ IoFLAGS(io) |= IOf_UNTAINT;
+ RETVAL = 0;
+ }
+ else {
+#endif
+ RETVAL = -1;
+ errno = EINVAL;
+#ifdef IOf_UNTAINT
+ }
+#endif
+ OUTPUT:
+ RETVAL
+
SysRet
fflush(handle)
OutputStream handle
int type
int size
CODE:
-#ifdef PERLIO_IS_STDIO
-#ifdef _IOFBF /* Should be HAS_SETVBUF once Configure tests for that */
+/* Should check HAS_SETVBUF once Configure tests for that */
+#if defined(PERLIO_IS_STDIO) && defined(_IOFBF)
+ if (!handle) /* Try input stream. */
+ handle = IoIFP(sv_2io(ST(0)));
if (handle)
RETVAL = setvbuf(handle, buf, type, size);
else {
errno = EINVAL;
}
#else
- RETVAL = (SysRet) not_here("IO::Handle::setvbuf");
-#endif /* _IOFBF */
-#else
- not_here("IO::Handle::setvbuf");
+ RETVAL = (SysRet) not_here("IO::Handle::setvbuf");
#endif
OUTPUT:
RETVAL