* modify it under the same terms as Perl itself.
*/
+#define PERL_EXT_IO
+
#define PERL_NO_GET_CONTEXT
#include "EXTERN.h"
#define PERLIO_NOT_STDIO 1
#endif
#ifdef PerlIO
+#ifdef MACOS_TRADITIONAL
+#define PERLIO_IS_STDIO 1
+#undef setbuf
+#undef setvbuf
+#define setvbuf _stdsetvbuf
+#define setbuf(f,b) ( __sf_setbuf(f,b) )
+#endif
typedef int SysRet;
typedef PerlIO * InputStream;
typedef PerlIO * OutputStream;
#endif
static int
-io_blocking(InputStream f, int block)
+io_blocking(pTHX_ InputStream f, int block)
{
int RETVAL;
if(!f) {
PROTOTYPE: $;$
CODE:
{
- int ret = io_blocking(handle, items == 1 ? -1 : blk ? 1 : 0);
+ int ret = io_blocking(aTHX_ handle, items == 1 ? -1 : blk ? 1 : 0);
if(ret >= 0)
XSRETURN_IV(ret);
else
RETVAL
void
-setbuf(handle, buf)
+setbuf(handle, ...)
OutputStream handle
- char * buf = SvPOK(ST(1)) ? sv_grow(ST(1), BUFSIZ) : 0;
CODE:
if (handle)
#ifdef PERLIO_IS_STDIO
+ {
+ char *buf = items == 2 && SvPOK(ST(1)) ?
+ sv_grow(ST(1), BUFSIZ) : 0;
setbuf(handle, buf);
+ }
#else
not_here("IO::Handle::setbuf");
#endif
SysRet
-setvbuf(handle, buf, type, size)
- OutputStream handle
- char * buf = SvPOK(ST(1)) ? sv_grow(ST(1), SvIV(ST(3))) : 0;
- int type
- int size
+setvbuf(...)
CODE:
+ if (items != 4)
+ Perl_croak(aTHX_ "Usage: IO::Handle::setvbuf(handle, buf, type, size)");
#if defined(PERLIO_IS_STDIO) && defined(_IOFBF) && defined(HAS_SETVBUF)
+ {
+ OutputStream handle = 0;
+ char * buf = SvPOK(ST(1)) ? sv_grow(ST(1), SvIV(ST(3))) : 0;
+ int type;
+ int size;
+
+ if (items == 4) {
+ handle = IoOFP(sv_2io(ST(0)));
+ buf = SvPOK(ST(1)) ? sv_grow(ST(1), SvIV(ST(3))) : 0;
+ type = (int)SvIV(ST(2));
+ size = (int)SvIV(ST(3));
+ }
if (!handle) /* Try input stream. */
handle = IoIFP(sv_2io(ST(0)));
- if (handle)
+ if (items == 4 && handle)
RETVAL = setvbuf(handle, buf, type, size);
else {
RETVAL = -1;
errno = EINVAL;
}
+ }
#else
RETVAL = (SysRet) not_here("IO::Handle::setvbuf");
#endif
#ifdef HAS_SOCKATMARK
RETVAL = sockatmark(fd);
#else
-# ifdef SIOCATMARK
{
int flag = 0;
-
+# ifdef SIOCATMARK
+# if defined(NETWARE) || defined(WIN32)
+ if (ioctl(fd, SIOCATMARK, (void*)&flag) != 0)
+# else
if (ioctl(fd, SIOCATMARK, &flag) != 0)
+# endif
XSRETURN_UNDEF;
# else
not_here("IO::Socket::atmark");