aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBud Davis <bdavis9659@comcast.net>2004-12-02 04:29:00 +0000
committerBud Davis <bdavis@gcc.gnu.org>2004-12-02 04:29:00 +0000
commit78579b601d74b339eadbc08bb3cf1a4c48a70f69 (patch)
tree745d1aebc5887dc0f235b340b7d4bbafb28bbc61
parentf177a087002cef5c40eab070151d6dee4e39d346 (diff)
downloadgcc-78579b601d74b339eadbc08bb3cf1a4c48a70f69.zip
gcc-78579b601d74b339eadbc08bb3cf1a4c48a70f69.tar.gz
gcc-78579b601d74b339eadbc08bb3cf1a4c48a70f69.tar.bz2
re PR libfortran/18284 (BACKSPACE broken)
2004-12-02 Bud Davis <bdavis9659@comcast.net> PR libfortran/18284 * io/unix.c (fd_alloc_w_at): Update file_length when extending. * io/backspace.c (formatted_backspace): Reset endfile after backspace. PR fortran/18284 * gfortran.dg/backspace.f90 From-SVN: r91612
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/backspace.f9011
-rw-r--r--libgfortran/ChangeLog6
-rw-r--r--libgfortran/io/backspace.c1
-rw-r--r--libgfortran/io/unix.c3
5 files changed, 26 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2db19aa..da801f0 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2004-12-02 Bud Davis <bdavis9659@comcast.net>
+ PR fortran/18284
+ * gfortran.dg/backspace.f90
+
+2004-12-02 Bud Davis <bdavis9659@comcast.net>
+
* gfortran.dg/inquire.f90: New test.
2004-12-01 Janis Johnson <janis187@us.ibm.com>
diff --git a/gcc/testsuite/gfortran.dg/backspace.f90 b/gcc/testsuite/gfortran.dg/backspace.f90
new file mode 100644
index 0000000..4f0b9e9
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/backspace.f90
@@ -0,0 +1,11 @@
+! { dg-do run }
+!pr18284 BACKSPACE broken
+ open(unit=10,access='SEQUENTIAL',status='SCRATCH')
+ do I = 1,200
+ write(10,*)I
+ end do
+ backspace(10)
+ backspace(10)
+ read(10,*)I
+ if (I.NE.199) call abort
+ end
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index e90c0fa..a0b3ec1 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,5 +1,11 @@
2004-12-02 Bud Davis <bdavis9659@comcast.net>
+ PR libfortran/18284
+ * io/unix.c (fd_alloc_w_at): Update file_length when extending.
+ * io/backspace.c (formatted_backspace): Reset endfile after backspace.
+
+2004-12-02 Bud Davis <bdavis9659@comcast.net>
+
* io/inquire.c (inquire_via_unit): do not allow a direct access
file to be opened for sequential I/O.
diff --git a/libgfortran/io/backspace.c b/libgfortran/io/backspace.c
index c40e506..e378adf 100644
--- a/libgfortran/io/backspace.c
+++ b/libgfortran/io/backspace.c
@@ -77,6 +77,7 @@ done:
if (sseek (current_unit->s, base) == FAILURE)
goto io_error;
current_unit->last_record--;
+ current_unit->endfile = NO_ENDFILE;
return;
diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c
index 5be631a..8e3afbd 100644
--- a/libgfortran/io/unix.c
+++ b/libgfortran/io/unix.c
@@ -462,6 +462,9 @@ fd_alloc_w_at (unix_stream * s, int *len, gfc_offset where)
s->logical_offset = where + *len;
+ if (where + *len > s->file_length)
+ s->file_length = where + *len;
+
n = s->logical_offset - s->buffer_offset;
if (n > s->active)
s->active = n;