[ID 20001016.012] [PATCHes Included]OK: perl v5.7.0 on dos-djgpp djgpp
Peter J. Farley III [Mon, 16 Oct 2000 18:15:59 +0000 (14:15 -0400)]
Message-Id: <4.3.1.0.20001016180235.00ac65a0@pop5.banet.net>

p4raw-id: //depot/perl@7350

djgpp/djgpp.c
dosish.h
t/io/open.t

index c928851..80a627e 100644 (file)
@@ -433,3 +433,22 @@ Perl_DJGPP_init (int *argcp,char ***argvp)
         strcpy (perlprefix,"..");
 }
 
+int
+djgpp_fflush (FILE *fp)
+{
+    int res;
+
+    if ((res = fflush(fp)) == 0 && fp) {
+       Stat_t s;
+       if (Fstat(fileno(fp), &s) == 0 && !S_ISSOCK(s.st_mode))
+           res = fsync(fileno(fp));
+    }
+/*
+ * If the flush succeeded but set end-of-file, we need to clear
+ * the error because our caller may check ferror().  BTW, this
+ * probably means we just flushed an empty file.
+ */
+    if (res == 0 && fp && ferror(fp) == EOF) clearerr(fp);
+
+    return res;
+}
index 08b48fa..5f12b9d 100644 (file)
--- a/dosish.h
+++ b/dosish.h
 #define fwrite1 fwrite
 
 #define Fstat(fd,bufptr)   fstat((fd),(bufptr))
-#define Fflush(fp)         fflush(fp)
+#ifdef DJGPP
+#   define Fflush(fp)      djgpp_fflush(fp)
+#else
+#   define Fflush(fp)      fflush(fp)
+#endif
 #define Mkdir(path,mode)   mkdir((path),(mode))
 
 #ifndef WIN32
index b224cce..0190281 100755 (executable)
@@ -268,13 +268,13 @@ ok;
 {
     local *F;
     for (1..2) {
-        open(F, "echo #foo|") or print "not ";
+        open(F, "echo \\#foo|") or print "not ";
        print <F>;
        close F;
     }
     ok;
     for (1..2) {
-       open(F, "-|", "echo #foo") or print "not ";
+       open(F, "-|", "echo \\#foo") or print "not ";
        print <F>;
        close F;
     }