summaryrefslogtreecommitdiff
path: root/graphics/lib3ds/patches/patch-af
blob: a108ae585ace1a8576d776783d978e693affd795 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
$NetBSD: patch-af,v 1.1 2008/12/18 13:15:10 reinoud Exp $

--- lib3ds/io.c.orig	2001-07-11 15:47:35.000000000 +0200
+++ lib3ds/io.c
@@ -31,6 +31,11 @@
  * \author J.E. Hoffmann <je-h@gmx.net>
  */
 
+typedef union {
+    uint32_t dword_value;
+    float float_value;
+} Lib3dsDwordFloat;
+
 
 struct _Lib3dsIo {
   void *self;
@@ -248,15 +253,15 @@ Lib3dsFloat
 lib3ds_io_read_float(Lib3dsIo *io)
 {
   Lib3dsByte b[4];
-  Lib3dsDword d;
+  Lib3dsDwordFloat d;
 
   ASSERT(io);
   lib3ds_io_read(io, b, 4);
-  d=((Lib3dsDword)b[3] << 24) |
+  d.dword_value =((Lib3dsDword)b[3] << 24) |
     ((Lib3dsDword)b[2] << 16) |
     ((Lib3dsDword)b[1] << 8) |
     ((Lib3dsDword)b[0]);
-  return(*((Lib3dsFloat*)&d));
+  return d.float_value;
 }
 
 
@@ -459,14 +464,14 @@ Lib3dsBool
 lib3ds_io_write_float(Lib3dsIo *io, Lib3dsFloat l)
 {
   Lib3dsByte b[4];
-  Lib3dsDword d;
+  Lib3dsDwordFloat d;
 
   ASSERT(io);
-  d=*((Lib3dsDword*)&l);
-  b[3]=(Lib3dsByte)(((Lib3dsDword)d & 0xFF000000) >> 24);
-  b[2]=(Lib3dsByte)(((Lib3dsDword)d & 0x00FF0000) >> 16);
-  b[1]=(Lib3dsByte)(((Lib3dsDword)d & 0x0000FF00) >> 8);
-  b[0]=(Lib3dsByte)(((Lib3dsDword)d & 0x000000FF));
+  d.float_value = l;
+  b[3]=(Lib3dsByte)(((Lib3dsDword)d.dword_value & 0xFF000000) >> 24);
+  b[2]=(Lib3dsByte)(((Lib3dsDword)d.dword_value & 0x00FF0000) >> 16);
+  b[1]=(Lib3dsByte)(((Lib3dsDword)d.dword_value & 0x0000FF00) >> 8);
+  b[0]=(Lib3dsByte)(((Lib3dsDword)d.dword_value & 0x000000FF));
   if (lib3ds_io_write(io, b, 4)!=4) {
     return(LIB3DS_FALSE);
   }