diff options
Diffstat (limited to 'libgfortran')
-rw-r--r-- | libgfortran/ChangeLog | 15 | ||||
-rw-r--r-- | libgfortran/intrinsics/string_intrinsics.c | 5 | ||||
-rw-r--r-- | libgfortran/io/transfer.c | 7 | ||||
-rw-r--r-- | libgfortran/io/unix.c | 1 |
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; } |