]> git.mxchange.org Git - simgear.git/commitdiff
Zap aliasing compiler warnings.
authorfrohlich <frohlich>
Tue, 24 Mar 2009 08:11:36 +0000 (08:11 +0000)
committerTim Moore <timoore@redhat.com>
Mon, 30 Mar 2009 16:42:45 +0000 (18:42 +0200)
Modified Files:
  simgear/io/lowlevel.cxx

simgear/io/lowlevel.cxx

index 19909b7d5e9d2d2f07f329e846f54e30427728ba..74b9f93b368f7230ee5a2a77f4415e2bdd29baf0 100644 (file)
@@ -55,21 +55,25 @@ void sgWriteChar ( gzFile fd, const char var )
 
 void sgReadFloat ( gzFile fd, float *var )
 {
-    if ( gzread ( fd, var, sizeof(float) ) != sizeof(float) ) {
+    union { float v; uint32_t u; } buf;
+    if ( gzread ( fd, &buf.u, sizeof(float) ) != sizeof(float) ) {
         read_error = true ;
     }
     if ( sgIsBigEndian() ) {
-        sgEndianSwap( (uint32_t *)var);
+        sgEndianSwap( &buf.u );
     }
+    *var = buf.v;
 }
 
 
 void sgWriteFloat ( gzFile fd, const float var )
 {
+    union { float v; uint32_t u; } buf;
+    buf.v = var;
     if ( sgIsBigEndian() ) {
-        sgEndianSwap( (uint32_t *)&var);
+        sgEndianSwap( &buf.u );
     }
-    if ( gzwrite ( fd, (void *)(&var), sizeof(float) ) != sizeof(float) ) {
+    if ( gzwrite ( fd, (void *)(&buf.u), sizeof(float) ) != sizeof(float) ) {
         write_error = true ;
     }
 }
@@ -77,21 +81,25 @@ void sgWriteFloat ( gzFile fd, const float var )
 
 void sgReadDouble ( gzFile fd, double *var )
 {
-    if ( gzread ( fd, var, sizeof(double) ) != sizeof(double) ) {
+    union { double v; uint64_t u; } buf;
+    if ( gzread ( fd, &buf.u, sizeof(double) ) != sizeof(double) ) {
         read_error = true ;
     }
     if ( sgIsBigEndian() ) {
-        sgEndianSwap( (uint64_t *)var);
+        sgEndianSwap( &buf.u );
     }
+    *var = buf.v;
 }
 
 
 void sgWriteDouble ( gzFile fd, const double var )
 {
+    union { double v; uint64_t u; } buf;
+    buf.v = var;
     if ( sgIsBigEndian() ) {
-        sgEndianSwap( (uint64_t *)&var);
+        sgEndianSwap( &buf.u );
     }
-    if ( gzwrite ( fd, (void *)(&var), sizeof(double) ) != sizeof(double) ) {
+    if ( gzwrite ( fd, (void *)(&buf.u), sizeof(double) ) != sizeof(double) ) {
         write_error = true ;
     }
 }