From dfb5c32378aca6689ce9e84c5b40f0d30ffd788c Mon Sep 17 00:00:00 2001
From: sje <sje@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 14 Dec 2004 16:34:08 +0000
Subject: [PATCH] 	* libgfortran/io/transfer.c (us_read): Use
 memcpy/memset 	instead of assignment to fill unaligned buffer. 
 (us_write): Ditto. 	(next_record_w): Ditto.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@92143 138bc75d-0d04-0410-961f-82ee72b054a4
---
 libgfortran/ChangeLog     |  7 +++++++
 libgfortran/io/transfer.c | 18 ++++++++++--------
 2 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 2a6ecf682819..a4d2e44d2b10 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,10 @@
+2004-12-14  Steve Ellcey  <sje@cup.hp.com>
+
+	* libgfortran/io/transfer.c (us_read): Use memcpy/memset
+	instead of assignment to fill unaligned buffer.
+	(us_write): Ditto.
+	(next_record_w): Ditto.
+
 2004-12-05  Steven G. Kargl  <kargls@comcast.net>
 
 	PR libfortran/18966
diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c
index dc94154243de..c3daa21bfacf 100644
--- a/libgfortran/io/transfer.c
+++ b/libgfortran/io/transfer.c
@@ -827,11 +827,12 @@ transfer_complex (void *p, int kind)
 static void
 us_read (void)
 {
-  gfc_offset *p;
+  char *p;
   int n;
+  gfc_offset i;
 
   n = sizeof (gfc_offset);
-  p = (gfc_offset *) salloc_r (current_unit->s, &n);
+  p = salloc_r (current_unit->s, &n);
 
   if (p == NULL || n != sizeof (gfc_offset))
     {
@@ -839,7 +840,8 @@ us_read (void)
       return;
     }
 
-  current_unit->bytes_left = *p;
+  memcpy (&i, p, sizeof (gfc_offset));
+  current_unit->bytes_left = i;
 }
 
 
@@ -849,11 +851,11 @@ us_read (void)
 static void
 us_write (void)
 {
-  gfc_offset *p;
+  char *p;
   int length;
 
   length = sizeof (gfc_offset);
-  p = (gfc_offset *) salloc_w (current_unit->s, &length);
+  p = salloc_w (current_unit->s, &length);
 
   if (p == NULL)
     {
@@ -861,7 +863,7 @@ us_write (void)
       return;
     }
 
-  *p = 0;			/* Bogus value for now.  */
+  memset (p, '\0', sizeof (gfc_offset));	/* Bogus value for now.  */
   if (sfree (current_unit->s) == FAILURE)
     generate_error (ERROR_OS, NULL);
 
@@ -1285,7 +1287,7 @@ next_record_w (int done)
       if (p == NULL)
 	goto io_error;
 
-      *((gfc_offset *) p) = m;
+      memcpy (p, &m, sizeof (gfc_offset));
       if (sfree (current_unit->s) == FAILURE)
 	goto io_error;
 
@@ -1296,7 +1298,7 @@ next_record_w (int done)
       if (p == NULL)
 	generate_error (ERROR_OS, NULL);
 
-      *((gfc_offset *) p) = m;
+      memcpy (p, &m, sizeof (gfc_offset));
       if (sfree (current_unit->s) == FAILURE)
 	goto io_error;
 
-- 
GitLab