diff options
author | Jarkko Hietaniemi <jhi@iki.fi> | 2001-12-11 14:33:14 +0000 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2001-12-11 14:33:14 +0000 |
commit | 772bf6a09dabb907d5599cd1b05494c174e5198d (patch) | |
tree | 852095faac15bf2d497b71c3f3e0f8056eb91709 | |
parent | 06313c6a15bfdcf10349b63b4c9be1017beaeab3 (diff) | |
download | perl-772bf6a09dabb907d5599cd1b05494c174e5198d.tar.gz |
Try to handle platforms that have O_TEXT != O_BINARY but
which are not DOSish, BeOS being one of such platforms.
Ideally this should be a Configure test, not a hardwired
cpp symbol test...
p4raw-id: //depot/perl@13621
-rw-r--r-- | doio.c | 6 | ||||
-rw-r--r-- | perl.h | 12 | ||||
-rw-r--r-- | perlio.c | 28 | ||||
-rw-r--r-- | perliol.h | 2 |
4 files changed, 32 insertions, 16 deletions
@@ -1107,7 +1107,11 @@ Perl_do_binmode(pTHX_ PerlIO *fp, int iotype, int mode) /* The old body of this is now in non-LAYER part of perlio.c * This is a stub for any XS code which might have been calling it. */ - char *name = (O_BINARY != O_TEXT && !(mode & O_BINARY)) ? ":crlf" : ":raw"; + char *name = ":raw"; +#ifdef PERLIO_CRLF + if (!(mode & O_BINARY))) + name = ":crlf"; +#endif return PerlIO_binmode(aTHX_ fp, iotype, mode, name); } @@ -3925,6 +3925,18 @@ int flock(int fd, int op); # define O_TEXT 0 #endif +#if O_TEXT != O_BINARY + /* If you have different O_TEXT and O_BINARY and you are a CLRF shop, + * that is, you are somehow DOSish. */ +# if !defined(__BEOS__) +# define PERLIO_CLRF 1 +# else + /* If you have O_TEXT different from your O_BINARY but you still are + * not a CRLF shop. */ +# undef PERLIO_CLRF +# endif +#endif + #ifdef IAMSUID #ifdef I_SYS_STATVFS @@ -859,14 +859,12 @@ void PerlIO_default_buffer(pTHX_ PerlIO_list_t *av) { PerlIO_funcs *tab = &PerlIO_perlio; - if (O_BINARY != O_TEXT) { - tab = &PerlIO_crlf; - } - else { - if (PerlIO_stdio.Set_ptrcnt) { - tab = &PerlIO_stdio; - } - } +#ifdef PERLIO_CRLF + tab = &PerlIO_crlf; +#endif + if (PerlIO_stdio.Set_ptrcnt) + tab = &PerlIO_stdio; +#else PerlIO_debug("Pushing %s\n", tab->name); PerlIO_list_push(aTHX_ av, PerlIO_find_layer(aTHX_ tab->name, 0, 0), &PL_sv_undef); @@ -1078,7 +1076,8 @@ PerlIO_binmode(pTHX_ PerlIO *f, int iotype, int mode, const char *names) /* Can't flush if switching encodings. */ if (!(names && memEQ(names, ":encoding(", 10))) { PerlIO_flush(f); - if (!names && (O_TEXT != O_BINARY && (mode & O_BINARY))) { +#ifdef PERLIO_CRLF + if (!names && (mode & O_BINARY)) { PerlIO *top = f; while (*top) { if (PerlIOBase(top)->tab == &PerlIO_crlf) { @@ -1089,6 +1088,7 @@ PerlIO_binmode(pTHX_ PerlIO *f, int iotype, int mode, const char *names) PerlIO_flush(top); } } +#endif } return PerlIO_apply_layers(aTHX_ f, NULL, names) == 0 ? TRUE : FALSE; } @@ -1781,7 +1781,7 @@ PerlIO_modestr(PerlIO *f, char *buf) *s++ = '+'; } } -#if O_TEXT != O_BINARY +#ifdef PERLIO_CRLF if (!(flags & PERLIO_F_CRLF)) *s++ = 'b'; #endif @@ -2367,9 +2367,9 @@ PerlIOStdio_mode(const char *mode, char *tmode) while (*mode) { *tmode++ = *mode++; } - if (O_BINARY != O_TEXT) { - *tmode++ = 'b'; - } +#ifdef PERLIO_CRLF + *tmode++ = 'b'; +#endif *tmode = '\0'; return ret; } @@ -2906,7 +2906,7 @@ PerlIOBuf_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers, return NULL; } else { fd = PerlIO_fileno(f); -#if (O_BINARY != O_TEXT) && !defined(__BEOS__) +#ifdef PERLIO_CRLF /* * do something about failing setmode()? --jhi */ @@ -111,7 +111,7 @@ extern PerlIO *PerlIO_allocate(pTHX); extern SV *PerlIO_arg_fetch(PerlIO_list_t *av, IV n); #define PerlIOArg PerlIO_arg_fetch(layers,n) -#if O_BINARY != O_TEXT +#ifdef PERLIO_CRLF #define PERLIO_STDTEXT "t" #else #define PERLIO_STDTEXT "" |