aboutsummaryrefslogtreecommitdiff
path: root/libgfortran/io/intrinsics.c
diff options
context:
space:
mode:
authorJanne Blomqvist <jb@gcc.gnu.org>2009-04-30 18:12:37 +0300
committerJanne Blomqvist <jb@gcc.gnu.org>2009-04-30 18:12:37 +0300
commitee56ac9def714d225c4c7d1020390241780595c0 (patch)
tree164be18da851f117899e247478ee56e7245b26dc /libgfortran/io/intrinsics.c
parent43fcece879afabd701904209451ca9182f251c48 (diff)
downloadgcc-ee56ac9def714d225c4c7d1020390241780595c0.zip
gcc-ee56ac9def714d225c4c7d1020390241780595c0.tar.gz
gcc-ee56ac9def714d225c4c7d1020390241780595c0.tar.bz2
Fix PR libfortran/39667
From-SVN: r147004
Diffstat (limited to 'libgfortran/io/intrinsics.c')
-rw-r--r--libgfortran/io/intrinsics.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/libgfortran/io/intrinsics.c b/libgfortran/io/intrinsics.c
index 0a894aa..0e33e84 100644
--- a/libgfortran/io/intrinsics.c
+++ b/libgfortran/io/intrinsics.c
@@ -46,6 +46,13 @@ PREFIX(fgetc) (const int * unit, char * c, gfc_charlen_type c_len)
if (u == NULL)
return -1;
+ fbuf_reset (u);
+ if (u->mode == WRITING)
+ {
+ sflush (u->s);
+ u->mode = READING;
+ }
+
memset (c, ' ', c_len);
ret = sread (u->s, c, 1);
unlock_unit (u);
@@ -118,6 +125,13 @@ PREFIX(fputc) (const int * unit, char * c,
if (u == NULL)
return -1;
+ fbuf_reset (u);
+ if (u->mode == READING)
+ {
+ sflush (u->s);
+ u->mode = WRITING;
+ }
+
s = swrite (u->s, c, 1);
unlock_unit (u);
if (s < 0)