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
57
58
59
60
61
62
63
64
|
$NetBSD: patch-af,v 1.2 2009/01/28 00:37:27 dsainty Exp $
--- lib3ds/io.c.orig 2001-07-12 01:47:35.000000000 +1200
+++ lib3ds/io.c 2009-01-25 19:59:22.437777313 +1300
@@ -21,6 +21,7 @@
*/
#define LIB3DS_EXPORT
#include <lib3ds/io.h>
+#include <stdint.h>
#include <stdlib.h>
#include <string.h>
@@ -31,6 +32,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 +254,15 @@
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 +465,14 @@
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);
}
|