diff options
author | Steve Ellcey <sje@cup.hp.com> | 2005-09-07 20:16:47 +0000 |
---|---|---|
committer | Steve Ellcey <sje@gcc.gnu.org> | 2005-09-07 20:16:47 +0000 |
commit | 98cd8256afa26fdcf4c4a7b01e4199fb47b2898d (patch) | |
tree | 1aba9950ba1a9a153cd920858aeac4426db8af55 | |
parent | 9f36bc49f8e9af63c64536da3e6085274c842e5b (diff) | |
download | gcc-98cd8256afa26fdcf4c4a7b01e4199fb47b2898d.zip gcc-98cd8256afa26fdcf4c4a7b01e4199fb47b2898d.tar.gz gcc-98cd8256afa26fdcf4c4a7b01e4199fb47b2898d.tar.bz2 |
re PR libfortran/23419 (unformatted complex I/O with kind=10)
PR libfortran/23419
* io/write.c (extract_int): Use memcpy to access buffer.
(extract_uint): Ditto.
(extract_real): Ditto.
From-SVN: r104000
-rw-r--r-- | libgfortran/ChangeLog | 7 | ||||
-rw-r--r-- | libgfortran/io/write.c | 84 |
2 files changed, 77 insertions, 14 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 8cc1a03..8b2bb62 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,10 @@ +2005-09-07 Steve Ellcey <sje@cup.hp.com> + + PR libfortran/23419 + * io/write.c (extract_int): Use memcpy to access buffer. + (extract_uint): Ditto. + (extract_real): Ditto. + 2005-09-05 Thomas Koenig <Thomas.Koenig@online.de> * io/list_read.c: Adjust size of of value to 32 (to hold diff --git a/libgfortran/io/write.c b/libgfortran/io/write.c index 74d0f9f..da9feb3 100644 --- a/libgfortran/io/write.c +++ b/libgfortran/io/write.c @@ -79,20 +79,40 @@ extract_int (const void *p, int len) switch (len) { case 1: - i = *((const GFC_INTEGER_1 *) p); + { + GFC_INTEGER_1 tmp; + memcpy ((void *) &tmp, p, len); + i = tmp; + } break; case 2: - i = *((const GFC_INTEGER_2 *) p); + { + GFC_INTEGER_2 tmp; + memcpy ((void *) &tmp, p, len); + i = tmp; + } break; case 4: - i = *((const GFC_INTEGER_4 *) p); + { + GFC_INTEGER_4 tmp; + memcpy ((void *) &tmp, p, len); + i = tmp; + } break; case 8: - i = *((const GFC_INTEGER_8 *) p); + { + GFC_INTEGER_8 tmp; + memcpy ((void *) &tmp, p, len); + i = tmp; + } break; #ifdef HAVE_GFC_INTEGER_16 case 16: - i = *((const GFC_INTEGER_16 *) p); + { + GFC_INTEGER_16 tmp; + memcpy ((void *) &tmp, p, len); + i = tmp; + } break; #endif default: @@ -113,20 +133,40 @@ extract_uint (const void *p, int len) switch (len) { case 1: - i = (GFC_UINTEGER_1) *((const GFC_INTEGER_1 *) p); + { + GFC_INTEGER_1 tmp; + memcpy ((void *) &tmp, p, len); + i = (GFC_UINTEGER_1) tmp; + } break; case 2: - i = (GFC_UINTEGER_2) *((const GFC_INTEGER_2 *) p); + { + GFC_INTEGER_2 tmp; + memcpy ((void *) &tmp, p, len); + i = (GFC_UINTEGER_2) tmp; + } break; case 4: - i = (GFC_UINTEGER_4) *((const GFC_INTEGER_4 *) p); + { + GFC_INTEGER_4 tmp; + memcpy ((void *) &tmp, p, len); + i = (GFC_UINTEGER_4) tmp; + } break; case 8: - i = (GFC_UINTEGER_8) *((const GFC_INTEGER_8 *) p); + { + GFC_INTEGER_8 tmp; + memcpy ((void *) &tmp, p, len); + i = (GFC_UINTEGER_8) tmp; + } break; #ifdef HAVE_GFC_INTEGER_16 case 16: - i = (GFC_UINTEGER_16) *((const GFC_INTEGER_16 *) p); + { + GFC_INTEGER_16 tmp; + memcpy ((void *) &tmp, p, len); + i = (GFC_UINTEGER_16) tmp; + } break; #endif default: @@ -143,19 +183,35 @@ extract_real (const void *p, int len) switch (len) { case 4: - i = *((const GFC_REAL_4 *) p); + { + GFC_REAL_4 tmp; + memcpy ((void *) &tmp, p, len); + i = tmp; + } break; case 8: - i = *((const GFC_REAL_8 *) p); + { + GFC_REAL_8 tmp; + memcpy ((void *) &tmp, p, len); + i = tmp; + } break; #ifdef HAVE_GFC_REAL_10 case 10: - i = *((const GFC_REAL_10 *) p); + { + GFC_REAL_10 tmp; + memcpy ((void *) &tmp, p, len); + i = tmp; + } break; #endif #ifdef HAVE_GFC_REAL_16 case 16: - i = *((const GFC_REAL_16 *) p); + { + GFC_REAL_16 tmp; + memcpy ((void *) &tmp, p, len); + i = tmp; + } break; #endif default: |