summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--djgpp/djgpp.c13
-rw-r--r--perlio.c3
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;
+}
+
diff --git a/perlio.c b/perlio.c
index 999b5fb19f..b59737c669 100644
--- a/perlio.c
+++ b/perlio.c
@@ -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);