| @@ -1,56 +1,64 @@ | | | @@ -1,56 +1,64 @@ |
1 | $NetBSD: patch-af,v 1.1 2008/12/18 13:15:10 reinoud Exp $ | | 1 | $NetBSD: patch-af,v 1.2 2009/01/28 00:37:27 dsainty Exp $ |
2 | | | 2 | |
3 | --- lib3ds/io.c.orig 2001-07-11 15:47:35.000000000 +0200 | | 3 | --- lib3ds/io.c.orig 2001-07-12 01:47:35.000000000 +1200 |
4 | +++ lib3ds/io.c | | 4 | +++ lib3ds/io.c 2009-01-25 19:59:22.437777313 +1300 |
5 | @@ -31,6 +31,11 @@ | | 5 | @@ -21,6 +21,7 @@ |
| | | 6 | */ |
| | | 7 | #define LIB3DS_EXPORT |
| | | 8 | #include <lib3ds/io.h> |
| | | 9 | +#include <stdint.h> |
| | | 10 | #include <stdlib.h> |
| | | 11 | #include <string.h> |
| | | 12 | |
| | | 13 | @@ -31,6 +32,11 @@ |
6 | * \author J.E. Hoffmann <je-h@gmx.net> | | 14 | * \author J.E. Hoffmann <je-h@gmx.net> |
7 | */ | | 15 | */ |
8 | | | 16 | |
9 | +typedef union { | | 17 | +typedef union { |
10 | + uint32_t dword_value; | | 18 | + uint32_t dword_value; |
11 | + float float_value; | | 19 | + float float_value; |
12 | +} Lib3dsDwordFloat; | | 20 | +} Lib3dsDwordFloat; |
13 | + | | 21 | + |
14 | | | 22 | |
15 | struct _Lib3dsIo { | | 23 | struct _Lib3dsIo { |
16 | void *self; | | 24 | void *self; |
17 | @@ -248,15 +253,15 @@ Lib3dsFloat | | 25 | @@ -248,15 +254,15 @@ |
18 | lib3ds_io_read_float(Lib3dsIo *io) | | 26 | lib3ds_io_read_float(Lib3dsIo *io) |
19 | { | | 27 | { |
20 | Lib3dsByte b[4]; | | 28 | Lib3dsByte b[4]; |
21 | - Lib3dsDword d; | | 29 | - Lib3dsDword d; |
22 | + Lib3dsDwordFloat d; | | 30 | + Lib3dsDwordFloat d; |
23 | | | 31 | |
24 | ASSERT(io); | | 32 | ASSERT(io); |
25 | lib3ds_io_read(io, b, 4); | | 33 | lib3ds_io_read(io, b, 4); |
26 | - d=((Lib3dsDword)b[3] << 24) | | | 34 | - d=((Lib3dsDword)b[3] << 24) | |
27 | + d.dword_value =((Lib3dsDword)b[3] << 24) | | | 35 | + d.dword_value =((Lib3dsDword)b[3] << 24) | |
28 | ((Lib3dsDword)b[2] << 16) | | | 36 | ((Lib3dsDword)b[2] << 16) | |
29 | ((Lib3dsDword)b[1] << 8) | | | 37 | ((Lib3dsDword)b[1] << 8) | |
30 | ((Lib3dsDword)b[0]); | | 38 | ((Lib3dsDword)b[0]); |
31 | - return(*((Lib3dsFloat*)&d)); | | 39 | - return(*((Lib3dsFloat*)&d)); |
32 | + return d.float_value; | | 40 | + return d.float_value; |
33 | } | | 41 | } |
34 | | | 42 | |
35 | | | 43 | |
36 | @@ -459,14 +464,14 @@ Lib3dsBool | | 44 | @@ -459,14 +465,14 @@ |
37 | lib3ds_io_write_float(Lib3dsIo *io, Lib3dsFloat l) | | 45 | lib3ds_io_write_float(Lib3dsIo *io, Lib3dsFloat l) |
38 | { | | 46 | { |
39 | Lib3dsByte b[4]; | | 47 | Lib3dsByte b[4]; |
40 | - Lib3dsDword d; | | 48 | - Lib3dsDword d; |
41 | + Lib3dsDwordFloat d; | | 49 | + Lib3dsDwordFloat d; |
42 | | | 50 | |
43 | ASSERT(io); | | 51 | ASSERT(io); |
44 | - d=*((Lib3dsDword*)&l); | | 52 | - d=*((Lib3dsDword*)&l); |
45 | - b[3]=(Lib3dsByte)(((Lib3dsDword)d & 0xFF000000) >> 24); | | 53 | - b[3]=(Lib3dsByte)(((Lib3dsDword)d & 0xFF000000) >> 24); |
46 | - b[2]=(Lib3dsByte)(((Lib3dsDword)d & 0x00FF0000) >> 16); | | 54 | - b[2]=(Lib3dsByte)(((Lib3dsDword)d & 0x00FF0000) >> 16); |
47 | - b[1]=(Lib3dsByte)(((Lib3dsDword)d & 0x0000FF00) >> 8); | | 55 | - b[1]=(Lib3dsByte)(((Lib3dsDword)d & 0x0000FF00) >> 8); |
48 | - b[0]=(Lib3dsByte)(((Lib3dsDword)d & 0x000000FF)); | | 56 | - b[0]=(Lib3dsByte)(((Lib3dsDword)d & 0x000000FF)); |
49 | + d.float_value = l; | | 57 | + d.float_value = l; |
50 | + b[3]=(Lib3dsByte)(((Lib3dsDword)d.dword_value & 0xFF000000) >> 24); | | 58 | + b[3]=(Lib3dsByte)(((Lib3dsDword)d.dword_value & 0xFF000000) >> 24); |
51 | + b[2]=(Lib3dsByte)(((Lib3dsDword)d.dword_value & 0x00FF0000) >> 16); | | 59 | + b[2]=(Lib3dsByte)(((Lib3dsDword)d.dword_value & 0x00FF0000) >> 16); |
52 | + b[1]=(Lib3dsByte)(((Lib3dsDword)d.dword_value & 0x0000FF00) >> 8); | | 60 | + b[1]=(Lib3dsByte)(((Lib3dsDword)d.dword_value & 0x0000FF00) >> 8); |
53 | + b[0]=(Lib3dsByte)(((Lib3dsDword)d.dword_value & 0x000000FF)); | | 61 | + b[0]=(Lib3dsByte)(((Lib3dsDword)d.dword_value & 0x000000FF)); |
54 | if (lib3ds_io_write(io, b, 4)!=4) { | | 62 | if (lib3ds_io_write(io, b, 4)!=4) { |
55 | return(LIB3DS_FALSE); | | 63 | return(LIB3DS_FALSE); |
56 | } | | 64 | } |