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);
}
|