{
PerlIOUnix *s = PerlIOSelf(f,PerlIOUnix);
s->fd = PerlIO_fileno(PerlIONext(f));
- s->oflags = PerlIOUnix_oflags(mode);
+ /* XXX could (or should) we retrieve the oflags from the open file handle
+ rather than believing the "mode" we are passed in?
+ XXX Should the value on NULL mode be 0 or -1? */
+ s->oflags = mode ? PerlIOUnix_oflags(mode) : -1;
}
PerlIOBase(f)->flags |= PERLIO_F_OPEN;
return code;
text files. If FILEHANDLE is an expression, the value is taken as the
name of the filehandle. DISCIPLINE can be either of C<":raw"> for
binary mode or C<":crlf"> for "text" mode. If the DISCIPLINE is
-omitted, it defaults to C<":raw">.
+omitted, it defaults to C<":raw">. Returns true on success, C<undef> on
+failure.
binmode() should be called after open() but before any I/O is done on
the filehandle.
-On many systems binmode() currently has no effect, but in future, it
-will be extended to support user-defined input and output disciplines.
On some systems binmode() is necessary when you're not working with a
text file. For the sake of portability it is a good idea to always use
it when appropriate, and to never use it when it isn't appropriate.
--- /dev/null
+#!./perl -w
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+}
+
+
+use Test::More tests => 8;
+
+ok( binmode(STDERR), 'STDERR made binary' );
+ok( binmode(STDERR, ":unix"), ' with unix discipline' );
+ok( binmode(STDERR, ":raw"), ' raw' );
+ok( binmode(STDERR, ":crlf"), ' and crlf' );
+
+# If this one fails, we're in trouble. So we just bail out.
+ok( binmode(STDOUT), 'STDOUT made binary' ) || exit(1);
+ok( binmode(STDOUT, ":unix"), ' with unix discipline' );
+ok( binmode(STDERR, ":raw"), ' raw' );
+ok( binmode(STDERR, ":crlf"), ' and crlf' );