]> git.mxchange.org Git - simgear.git/blobdiff - simgear/io/lowlevel.cxx
Remove SVN sync code.
[simgear.git] / simgear / io / lowlevel.cxx
index fd90c717b3963047625d0148df94b76ee720fc47..d41bc801a03f2669f9442d3eb2446f3d237bc13f 100644 (file)
 //
 // You should have received a copy of the GNU General Public License
 // along with this program; if not, write to the Free Software
-// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 //
 // $Id$
 
 
+#ifdef HAVE_CONFIG_H
+#  include <simgear_config.h>
+#endif
+
 #include <string.h>            // for memcpy()
 
 #include "lowlevel.hxx" 
@@ -55,21 +59,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 +85,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 ;
     }
 }