diff options
author | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2014-06-29 02:49:45 +0000 |
---|---|---|
committer | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2014-06-29 02:49:45 +0000 |
commit | 9389649842d73a43dc50e9dd9f5c5c0fce53e055 (patch) | |
tree | 17f01f33c20a91178bd54baf36472975f9e50cd3 | |
parent | 7d90d0e1df9b9afddb35c2147b48ee11a3389c34 (diff) | |
download | gcc-9389649842d73a43dc50e9dd9f5c5c0fce53e055.zip gcc-9389649842d73a43dc50e9dd9f5c5c0fce53e055.tar.gz gcc-9389649842d73a43dc50e9dd9f5c5c0fce53e055.tar.bz2 |
re PR libfortran/61640 (KIND=4 Character Array Internal Unit Read Fail)
2014-06-28 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/61640
* io/list_read.c (next_char_internal): Adjust the read length to
a single wide character. (eat_spaces): Add missing paren.
* io/unix.c (mem_read4): Use the correct mem_alloc function for
wide character internal reads.
From-SVN: r212118
-rw-r--r-- | libgfortran/ChangeLog | 8 | ||||
-rw-r--r-- | libgfortran/io/list_read.c | 4 | ||||
-rw-r--r-- | libgfortran/io/unix.c | 4 |
3 files changed, 12 insertions, 4 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index c4e9949..10761e1 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,11 @@ +2014-06-28 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR libgfortran/61640 + * io/list_read.c (next_char_internal): Adjust the read length to + a single wide character. (eat_spaces): Add missing paren. + * io/unix.c (mem_read4): Use the correct mem_alloc function for + wide character internal reads. + 2014-06-28 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> PR fortran/29383 diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c index 96db059..1cb329f 100644 --- a/libgfortran/io/list_read.c +++ b/libgfortran/io/list_read.c @@ -273,7 +273,7 @@ next_char_internal (st_parameter_dt *dtp) /* Get the next character and handle end-of-record conditions. */ if (dtp->common.unit) /* Check for kind=4 internal unit. */ - length = sread (dtp->u.p.current_unit->s, &c, sizeof (gfc_char4_t)); + length = sread (dtp->u.p.current_unit->s, &c, 1); else { char cc; @@ -399,7 +399,7 @@ eat_spaces (st_parameter_dt *dtp) { for (i = 0; i < dtp->u.p.current_unit->bytes_left; i++) { - if (dtp->internal_unit[offset + i * sizeof (gfc_char4_t)] + if (dtp->internal_unit[(offset + i) * sizeof (gfc_char4_t)] != (gfc_char4_t)' ') break; } diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c index c9866d3..9ad293b 100644 --- a/libgfortran/io/unix.c +++ b/libgfortran/io/unix.c @@ -808,10 +808,10 @@ mem_read4 (stream * s, void * buf, ssize_t nbytes) void *p; int nb = nbytes; - p = mem_alloc_r (s, &nb); + p = mem_alloc_r4 (s, &nb); if (p) { - memcpy (buf, p, nb); + memcpy (buf, p, nb * 4); return (ssize_t) nb; } else |