summaryrefslogtreecommitdiff
path: root/perlio.c
diff options
context:
space:
mode:
authorSteve Peters <steve@fisharerojo.org>2005-10-31 03:51:08 +0000
committerSteve Peters <steve@fisharerojo.org>2005-10-31 03:51:08 +0000
commit71ab4674f0747d5a9c002a45e4fa7dd0f2cd0eef (patch)
tree13fcdf5e1ea12a525d470076a396102b50a72700 /perlio.c
parent5141f98e1f2246ec68c50524e948acf8e11514ab (diff)
downloadperl-71ab4674f0747d5a9c002a45e4fa7dd0f2cd0eef.tar.gz
perlsio_binmode() is pretty much a mathom on UNIX platforms, but it is
used on Cygwin, at least. p4raw-id: //depot/perl@25911
Diffstat (limited to 'perlio.c')
-rw-r--r--perlio.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/perlio.c b/perlio.c
index 9a7c0bcef5..250561486d 100644
--- a/perlio.c
+++ b/perlio.c
@@ -112,6 +112,69 @@ int mkstemp(char*);
else \
SETERRNO(EBADF, SS_IVCHAN)
+#ifndef USE_SFIO
+int
+perlsio_binmode(FILE *fp, int iotype, int mode)
+{
+ /*
+ * This used to be contents of do_binmode in doio.c
+ */
+#ifdef DOSISH
+# if defined(atarist) || defined(__MINT__)
+ if (!fflush(fp)) {
+ if (mode & O_BINARY)
+ ((FILE *) fp)->_flag |= _IOBIN;
+ else
+ ((FILE *) fp)->_flag &= ~_IOBIN;
+ return 1;
+ }
+ return 0;
+# else
+ dTHX;
+#ifdef NETWARE
+ if (PerlLIO_setmode(fp, mode) != -1) {
+#else
+ if (PerlLIO_setmode(fileno(fp), mode) != -1) {
+#endif
+# if defined(WIN32) && defined(__BORLANDC__)
+ /*
+ * The translation mode of the stream is maintained independent
+of
+ * the translation mode of the fd in the Borland RTL (heavy
+ * digging through their runtime sources reveal). User has to
+set
+ * the mode explicitly for the stream (though they don't
+document
+ * this anywhere). GSAR 97-5-24
+ */
+ fseek(fp, 0L, 0);
+ if (mode & O_BINARY)
+ fp->flags |= _F_BIN;
+ else
+ fp->flags &= ~_F_BIN;
+# endif
+ return 1;
+ }
+ else
+ return 0;
+# endif
+#else
+# if defined(USEMYBINMODE)
+ dTHX;
+ if (my_binmode(fp, iotype, mode) != FALSE)
+ return 1;
+ else
+ return 0;
+# else
+ PERL_UNUSED_ARG(fp);
+ PERL_UNUSED_ARG(iotype);
+ PERL_UNUSED_ARG(mode);
+ return 1;
+# endif
+#endif
+}
+#endif /* sfio */
+
#ifndef O_ACCMODE
#define O_ACCMODE 3 /* Assume traditional implementation */
#endif