Workaround for DJGPP broken F_GETFL from Laszlo.
Jarkko Hietaniemi [Mon, 28 Jan 2002 23:17:20 +0000 (23:17 +0000)]
p4raw-id: //depot/perl@14485

djgpp/djgpp.c
perlio.c

index 0e465b0..4c53eb0 100644 (file)
@@ -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;
+}
+
index 999b5fb..b59737c 100644 (file)
--- 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);