From 4e63a695883c39f00b6356a9c34ad30142827460 Mon Sep 17 00:00:00 2001
From: jvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri, 6 Jan 2006 01:39:34 +0000
Subject: [PATCH] 2006-01-05  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR libgfortran/25598
	* io/file_pos.c (unformatted_backspace): Assure the new file position
	to seek is not less than zero.
	(st_backspace): Set unit bytes_left to zero.
	* io/transfer.c (next_record_r): Fix line lengths, no functional change.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@109405 138bc75d-0d04-0410-961f-82ee72b054a4
---
 libgfortran/ChangeLog     | 13 +++++++++++++
 libgfortran/io/file_pos.c |  5 ++++-
 libgfortran/io/transfer.c |  7 +++++--
 3 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 0bfddc9730a0..ab6c766f8b27 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,4 +1,17 @@
+<<<<<<< .mine
+2006-01-03  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+	PR libgfortran/25598
+	* io/file_pos.c (unformatted_backspace): Assure the new file position
+	to seek is not less than zero.
+	(st_backspace): Set unit bytes_left to zero.
+	* io/transfer.c (next_record_r): Fix line lengths, no functional change.
+	a null value (default). Revert patch of 25419 on 2005-12-28.  
+
+2005-12-31  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+=======
 2006-01-02  Paolo Bonzini  <bonzini@gnu.org>
+>>>>>>> .r109401
 
         PR target/25259
         * configure.ac: Use GCC_HEADER_STDINT.
diff --git a/libgfortran/io/file_pos.c b/libgfortran/io/file_pos.c
index d9ac1e7f7eda..ba8f63172214 100644
--- a/libgfortran/io/file_pos.c
+++ b/libgfortran/io/file_pos.c
@@ -120,7 +120,9 @@ unformatted_backspace (st_parameter_filepos *fpp, gfc_unit *u)
   else
     reverse_memcpy (&m, p, sizeof (gfc_offset));
 
-  new = file_position (u->s) - m - 2*length;
+  if ((new = file_position (u->s) - m - 2*length) < 0)
+    new = 0;
+
   if (sseek (u->s, new) == FAILURE)
     goto io_error;
 
@@ -179,6 +181,7 @@ st_backspace (st_parameter_filepos *fpp)
 
       u->endfile = NO_ENDFILE;
       u->current_record = 0;
+      u->bytes_left = 0;
     }
 
  done:
diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c
index 2c12294398ee..049ebb247719 100644
--- a/libgfortran/io/transfer.c
+++ b/libgfortran/io/transfer.c
@@ -1645,8 +1645,10 @@ next_record_r (st_parameter_dt *dtp)
   switch (current_mode (dtp))
     {
     case UNFORMATTED_SEQUENTIAL:
-      dtp->u.p.current_unit->bytes_left += sizeof (gfc_offset);	/* Skip over tail */
 
+      /* Skip over tail */
+      dtp->u.p.current_unit->bytes_left += sizeof (gfc_offset);
+      
       /* Fall through...  */
 
     case FORMATTED_DIRECT:
@@ -1656,7 +1658,8 @@ next_record_r (st_parameter_dt *dtp)
 
       if (is_seekable (dtp->u.p.current_unit->s))
 	{
-	  new = file_position (dtp->u.p.current_unit->s) + dtp->u.p.current_unit->bytes_left;
+	  new = file_position (dtp->u.p.current_unit->s)
+		+ dtp->u.p.current_unit->bytes_left;
 
 	  /* Direct access files do not generate END conditions,
 	     only I/O errors.  */
-- 
GitLab