diff options
-rw-r--r-- | djgpp/djgpp.c | 13 | ||||
-rw-r--r-- | perlio.c | 3 |
2 files changed, 16 insertions, 0 deletions
diff --git a/djgpp/djgpp.c b/djgpp/djgpp.c index 0e465b0f82..4c53eb09c8 100644 --- a/djgpp/djgpp.c +++ b/djgpp/djgpp.c @@ -441,3 +441,16 @@ djgpp_fflush (FILE *fp) return res; } + +int djgpp_get_stream_mode(FILE *f) +{ + extern char *__file_handle_modes; + + int mode = __file_handle_modes[fileno(f)]; + if (f->_flag & _IORW) + return mode | O_RDWR; + if (f->_flag & _IOWRT) + return mode | O_WRONLY; + return mode | O_RDONLY; +} + @@ -187,6 +187,9 @@ PerlIO_fdupopen(pTHX_ PerlIO *f, CLONE_PARAMS *param, int flags) if (fd >= 0) { char mode[8]; int omode = fcntl(fd, F_GETFL); +#ifdef DJGPP + omode = djgpp_get_stream_mode(f); +#endif PerlIO_intmode2str(omode,mode,NULL); /* the r+ is a hack */ return PerlIO_fdopen(fd, mode); |