diff options
-rw-r--r-- | djgpp/djgpp.c | 19 | ||||
-rw-r--r-- | dosish.h | 6 | ||||
-rwxr-xr-x | t/io/open.t | 4 |
3 files changed, 26 insertions, 3 deletions
diff --git a/djgpp/djgpp.c b/djgpp/djgpp.c index c928851b76..80a627e518 100644 --- a/djgpp/djgpp.c +++ b/djgpp/djgpp.c @@ -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; +} @@ -100,7 +100,11 @@ #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 diff --git a/t/io/open.t b/t/io/open.t index b224cceb77..01902812e2 100755 --- a/t/io/open.t +++ b/t/io/open.t @@ -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; } |