aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2014-06-29 02:49:45 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2014-06-29 02:49:45 +0000
commit9389649842d73a43dc50e9dd9f5c5c0fce53e055 (patch)
tree17f01f33c20a91178bd54baf36472975f9e50cd3
parent7d90d0e1df9b9afddb35c2147b48ee11a3389c34 (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--libgfortran/io/list_read.c4
-rw-r--r--libgfortran/io/unix.c4
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