aboutsummaryrefslogtreecommitdiff
path: root/libgfortran
diff options
context:
space:
mode:
Diffstat (limited to 'libgfortran')
-rw-r--r--libgfortran/ChangeLog15
-rw-r--r--libgfortran/intrinsics/string_intrinsics.c5
-rw-r--r--libgfortran/io/transfer.c7
-rw-r--r--libgfortran/io/unix.c1
4 files changed, 24 insertions, 4 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 2560d698fb5..aafa660ccf5 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,18 @@
+2004-10-07 Paul Brook <paul@codesourcery.com>
+
+ * io/transfer.c (finalize_transfer): Free internal streams.
+ * io/unix.c (mem_close): Free stream object.
+
+2004-10-07 Paul Brook <paul@codesourcery.com>
+
+ * intrinsics/string_intrinsics.c (string_verify): Fix off by one
+ error.
+
+2004-10-06 Paul Brook <paul@codesourcery.com>
+
+ PR libfortran/17709
+ * io/transfer.c (data_transfer_init): Reset sf_seen_eor.
+
2004-10-04 Andrew Pinski <pinskia@physics.uc.edu>
* intrinsics/mvbits.c: Commit the file.
diff --git a/libgfortran/intrinsics/string_intrinsics.c b/libgfortran/intrinsics/string_intrinsics.c
index 5d231268ab6..ac70a9bb873 100644
--- a/libgfortran/intrinsics/string_intrinsics.c
+++ b/libgfortran/intrinsics/string_intrinsics.c
@@ -346,17 +346,16 @@ string_verify (GFC_INTEGER_4 slen, const char * str, GFC_INTEGER_4 setlen,
if (back)
{
- last = 0;
+ last = -1;
start = slen - 1;
delta = -1;
}
else
{
- last = slen - 1;
+ last = slen;
start = 0;
delta = 1;
}
- i = 0;
for (; start != last; start += delta)
{
for (i = 0; i < setlen; i++)
diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c
index ca920724b0d..ceff76fc35c 100644
--- a/libgfortran/io/transfer.c
+++ b/libgfortran/io/transfer.c
@@ -1074,6 +1074,7 @@ data_transfer_init (int read_flag)
g.seen_dollar = 0;
g.first_item = 1;
g.item_count = 0;
+ sf_seen_eor = 0;
pre_position ();
@@ -1348,7 +1349,8 @@ next_record (int done)
/* Finalize the current data transfer. For a nonadvancing transfer,
- this means advancing to the next record. */
+ this means advancing to the next record. For internal units close the
+ steam associated with the unit. */
static void
finalize_transfer (void)
@@ -1391,6 +1393,9 @@ finalize_transfer (void)
}
sfree (current_unit->s);
+
+ if (is_internal_unit ())
+ sclose (current_unit->s);
}
diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c
index e55966b2f2a..c8b18fc96fc 100644
--- a/libgfortran/io/unix.c
+++ b/libgfortran/io/unix.c
@@ -811,6 +811,7 @@ mem_truncate (unix_stream * s)
static try
mem_close (unix_stream * s)
{
+ free_mem (s);
return SUCCESS;
}