#include "EXTERN.h"
+#define PERLIO_NOT_STDIO 1
#include "perl.h"
#include "XSUB.h"
+
#ifdef I_UNISTD
# include <unistd.h>
#endif
+#ifdef I_FCNTL
+# include <fcntl.h>
+#endif
typedef int SysRet;
-typedef FILE * InputStream;
-typedef FILE * OutputStream;
+typedef PerlIO * InputStream;
+typedef PerlIO * OutputStream;
static int
not_here(s)
#else
return FALSE;
#endif
- if (strEQ(name, "SEEK_EOF"))
-#ifdef SEEK_EOF
- { *pval = SEEK_EOF; return TRUE; }
-#else
- return FALSE;
-#endif
break;
}
fgetpos(handle)
InputStream handle
CODE:
-#ifdef HAS_FGETPOS
if (handle) {
Fpos_t pos;
- fgetpos(handle, &pos);
+ PerlIO_getpos(handle, &pos);
ST(0) = sv_2mortal(newSVpv((char*)&pos, sizeof(Fpos_t)));
}
else {
ST(0) = &sv_undef;
errno = EINVAL;
}
-#else
- ST(0) = (SV *) not_here("IO::Seekable::fgetpos");
-#endif
SysRet
fsetpos(handle, pos)
InputStream handle
SV * pos
CODE:
-#ifdef HAS_FSETPOS
if (handle)
- RETVAL = fsetpos(handle, (Fpos_t*)SvPVX(pos));
+ RETVAL = PerlIO_setpos(handle, (Fpos_t*)SvPVX(pos));
else {
RETVAL = -1;
errno = EINVAL;
}
-#else
- RETVAL = (SysRet) not_here("IO::Seekable::fsetpos");
-#endif
OUTPUT:
RETVAL
new_tmpfile(packname = "IO::File")
char * packname
CODE:
- RETVAL = tmpfile();
+ RETVAL = PerlIO_tmpfile();
OUTPUT:
RETVAL
int c
CODE:
if (handle)
- RETVAL = ungetc(c, handle);
+ RETVAL = PerlIO_ungetc(handle, c);
else {
RETVAL = -1;
errno = EINVAL;
InputStream handle
CODE:
if (handle)
- RETVAL = ferror(handle);
+ RETVAL = PerlIO_error(handle);
else {
RETVAL = -1;
errno = EINVAL;
OutputStream handle
CODE:
if (handle)
- RETVAL = Fflush(handle);
+ RETVAL = PerlIO_flush(handle);
else {
RETVAL = -1;
errno = EINVAL;
char * buf = SvPOK(ST(1)) ? sv_grow(ST(1), BUFSIZ) : 0;
CODE:
if (handle)
+#ifdef PERLIO_IS_STDIO
setbuf(handle, buf);
-
-
+#else
+ not_here("IO::Handle::setbuf");
+#endif
SysRet
setvbuf(handle, buf, type, size)
int type
int size
CODE:
+#ifdef PERLIO_IS_STDIO
#ifdef _IOFBF /* Should be HAS_SETVBUF once Configure tests for that */
if (handle)
RETVAL = setvbuf(handle, buf, type, size);
#else
RETVAL = (SysRet) not_here("IO::Handle::setvbuf");
#endif /* _IOFBF */
+#else
+ not_here("IO::Handle::setvbuf");
+#endif
OUTPUT:
RETVAL