Skip to content

Latest commit

 

History

History
324 lines (262 loc) · 9.64 KB

physfs_byteorder.c

File metadata and controls

324 lines (262 loc) · 9.64 KB
 
Apr 5, 2002
Apr 5, 2002
1
2
3
4
5
/**
* PhysicsFS; a portable, flexible file i/o abstraction.
*
* Documentation is in physfs.h. It's verbose, honest. :)
*
Mar 11, 2007
Mar 11, 2007
6
* Please see the file LICENSE.txt in the source's root directory.
Apr 5, 2002
Apr 5, 2002
7
8
9
10
11
12
*
* This file written by Ryan C. Gordon.
*/
#include <stdio.h>
#include <stdlib.h>
Jul 10, 2002
Jul 10, 2002
13
14
15
#define __PHYSICSFS_INTERNAL__
#include "physfs_internal.h"
Apr 5, 2002
Apr 5, 2002
16
17
18
19
20
21
22
23
24
25
26
27
/* The macros used to swap values */
/* Try to use superfast macros on systems that support them */
#ifdef linux
#include <asm/byteorder.h>
#ifdef __arch__swab16
#define PHYSFS_Swap16 __arch__swab16
#endif
#ifdef __arch__swab32
#define PHYSFS_Swap32 __arch__swab32
#endif
#endif /* linux */
Apr 16, 2002
Apr 16, 2002
28
Mar 16, 2005
Mar 16, 2005
29
30
31
32
#if (defined macintosh) && !(defined __MWERKS__)
#define __inline__
#endif
Apr 16, 2002
Apr 16, 2002
33
34
35
36
#if (defined _MSC_VER)
#define __inline__ __inline
#endif
Apr 5, 2002
Apr 5, 2002
37
#ifndef PHYSFS_Swap16
Apr 16, 2002
Apr 16, 2002
38
static __inline__ PHYSFS_uint16 PHYSFS_Swap16(PHYSFS_uint16 D)
Apr 5, 2002
Apr 5, 2002
39
{
Jul 20, 2003
Jul 20, 2003
40
return((D<<8)|(D>>8));
Apr 5, 2002
Apr 5, 2002
41
42
43
}
#endif
#ifndef PHYSFS_Swap32
Apr 16, 2002
Apr 16, 2002
44
static __inline__ PHYSFS_uint32 PHYSFS_Swap32(PHYSFS_uint32 D)
Apr 5, 2002
Apr 5, 2002
45
{
Jul 20, 2003
Jul 20, 2003
46
return((D<<24)|((D<<8)&0x00FF0000)|((D>>8)&0x0000FF00)|(D>>24));
Apr 5, 2002
Apr 5, 2002
47
48
49
50
}
#endif
#ifndef PHYSFS_NO_64BIT_SUPPORT
#ifndef PHYSFS_Swap64
Apr 16, 2002
Apr 16, 2002
51
static __inline__ PHYSFS_uint64 PHYSFS_Swap64(PHYSFS_uint64 val) {
Jul 20, 2003
Jul 20, 2003
52
PHYSFS_uint32 hi, lo;
Apr 5, 2002
Apr 5, 2002
53
Jul 20, 2003
Jul 20, 2003
54
55
56
57
58
59
60
61
/* Separate into high and low 32-bit values and swap them */
lo = (PHYSFS_uint32)(val&0xFFFFFFFF);
val >>= 32;
hi = (PHYSFS_uint32)(val&0xFFFFFFFF);
val = PHYSFS_Swap32(lo);
val <<= 32;
val |= PHYSFS_Swap32(hi);
return(val);
Apr 5, 2002
Apr 5, 2002
62
63
64
65
66
67
68
69
}
#endif
#else
#ifndef PHYSFS_Swap64
/* This is mainly to keep compilers from complaining in PHYSFS code.
If there is no real 64-bit datatype, then compilers will complain about
the fake 64-bit datatype that PHYSFS provides when it compiles user code.
*/
Jul 20, 2003
Jul 20, 2003
70
#define PHYSFS_Swap64(X) (X)
Apr 5, 2002
Apr 5, 2002
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#endif
#endif /* PHYSFS_NO_64BIT_SUPPORT */
/* Byteswap item from the specified endianness to the native endianness */
#if PHYSFS_BYTEORDER == PHYSFS_LIL_ENDIAN
PHYSFS_uint16 PHYSFS_swapULE16(PHYSFS_uint16 x) { return(x); }
PHYSFS_sint16 PHYSFS_swapSLE16(PHYSFS_sint16 x) { return(x); }
PHYSFS_uint32 PHYSFS_swapULE32(PHYSFS_uint32 x) { return(x); }
PHYSFS_sint32 PHYSFS_swapSLE32(PHYSFS_sint32 x) { return(x); }
PHYSFS_uint64 PHYSFS_swapULE64(PHYSFS_uint64 x) { return(x); }
PHYSFS_sint64 PHYSFS_swapSLE64(PHYSFS_sint64 x) { return(x); }
PHYSFS_uint16 PHYSFS_swapUBE16(PHYSFS_uint16 x) { return(PHYSFS_Swap16(x)); }
PHYSFS_sint16 PHYSFS_swapSBE16(PHYSFS_sint16 x) { return(PHYSFS_Swap16(x)); }
PHYSFS_uint32 PHYSFS_swapUBE32(PHYSFS_uint32 x) { return(PHYSFS_Swap32(x)); }
PHYSFS_sint32 PHYSFS_swapSBE32(PHYSFS_sint32 x) { return(PHYSFS_Swap32(x)); }
PHYSFS_uint64 PHYSFS_swapUBE64(PHYSFS_uint64 x) { return(PHYSFS_Swap64(x)); }
PHYSFS_sint64 PHYSFS_swapSBE64(PHYSFS_sint64 x) { return(PHYSFS_Swap64(x)); }
#else
PHYSFS_uint16 PHYSFS_swapULE16(PHYSFS_uint16 x) { return(PHYSFS_Swap16(x)); }
PHYSFS_sint16 PHYSFS_swapSLE16(PHYSFS_sint16 x) { return(PHYSFS_Swap16(x)); }
PHYSFS_uint32 PHYSFS_swapULE32(PHYSFS_uint32 x) { return(PHYSFS_Swap32(x)); }
PHYSFS_sint32 PHYSFS_swapSLE32(PHYSFS_sint32 x) { return(PHYSFS_Swap32(x)); }
PHYSFS_uint64 PHYSFS_swapULE64(PHYSFS_uint64 x) { return(PHYSFS_Swap64(x)); }
PHYSFS_sint64 PHYSFS_swapSLE64(PHYSFS_sint64 x) { return(PHYSFS_Swap64(x)); }
PHYSFS_uint16 PHYSFS_swapUBE16(PHYSFS_uint16 x) { return(x); }
PHYSFS_sint16 PHYSFS_swapSBE16(PHYSFS_sint16 x) { return(x); }
PHYSFS_uint32 PHYSFS_swapUBE32(PHYSFS_uint32 x) { return(x); }
PHYSFS_sint32 PHYSFS_swapSBE32(PHYSFS_sint32 x) { return(x); }
PHYSFS_uint64 PHYSFS_swapUBE64(PHYSFS_uint64 x) { return(x); }
PHYSFS_sint64 PHYSFS_swapSBE64(PHYSFS_sint64 x) { return(x); }
#endif
Jul 10, 2002
Jul 10, 2002
106
Sep 26, 2004
Sep 26, 2004
107
int PHYSFS_readSLE16(PHYSFS_File *file, PHYSFS_sint16 *val)
Jul 10, 2002
Jul 10, 2002
108
109
110
111
112
113
114
115
116
{
PHYSFS_sint16 in;
BAIL_IF_MACRO(val == NULL, ERR_INVALID_ARGUMENT, 0);
BAIL_IF_MACRO(PHYSFS_read(file, &in, sizeof (in), 1) != 1, NULL, 0);
*val = PHYSFS_swapSLE16(in);
return(1);
} /* PHYSFS_readSLE16 */
Sep 26, 2004
Sep 26, 2004
117
int PHYSFS_readULE16(PHYSFS_File *file, PHYSFS_uint16 *val)
Jul 10, 2002
Jul 10, 2002
118
119
120
121
122
123
124
125
126
{
PHYSFS_uint16 in;
BAIL_IF_MACRO(val == NULL, ERR_INVALID_ARGUMENT, 0);
BAIL_IF_MACRO(PHYSFS_read(file, &in, sizeof (in), 1) != 1, NULL, 0);
*val = PHYSFS_swapULE16(in);
return(1);
} /* PHYSFS_readULE16 */
Sep 26, 2004
Sep 26, 2004
127
int PHYSFS_readSBE16(PHYSFS_File *file, PHYSFS_sint16 *val)
Jul 10, 2002
Jul 10, 2002
128
129
130
131
132
133
134
135
136
{
PHYSFS_sint16 in;
BAIL_IF_MACRO(val == NULL, ERR_INVALID_ARGUMENT, 0);
BAIL_IF_MACRO(PHYSFS_read(file, &in, sizeof (in), 1) != 1, NULL, 0);
*val = PHYSFS_swapSBE16(in);
return(1);
} /* PHYSFS_readSBE16 */
Sep 26, 2004
Sep 26, 2004
137
int PHYSFS_readUBE16(PHYSFS_File *file, PHYSFS_uint16 *val)
Jul 10, 2002
Jul 10, 2002
138
139
140
141
142
143
144
145
146
{
PHYSFS_uint16 in;
BAIL_IF_MACRO(val == NULL, ERR_INVALID_ARGUMENT, 0);
BAIL_IF_MACRO(PHYSFS_read(file, &in, sizeof (in), 1) != 1, NULL, 0);
*val = PHYSFS_swapUBE16(in);
return(1);
} /* PHYSFS_readUBE16 */
Sep 26, 2004
Sep 26, 2004
147
int PHYSFS_readSLE32(PHYSFS_File *file, PHYSFS_sint32 *val)
Jul 10, 2002
Jul 10, 2002
148
149
150
151
152
153
154
155
156
{
PHYSFS_sint32 in;
BAIL_IF_MACRO(val == NULL, ERR_INVALID_ARGUMENT, 0);
BAIL_IF_MACRO(PHYSFS_read(file, &in, sizeof (in), 1) != 1, NULL, 0);
*val = PHYSFS_swapSLE32(in);
return(1);
} /* PHYSFS_readSLE32 */
Sep 26, 2004
Sep 26, 2004
157
int PHYSFS_readULE32(PHYSFS_File *file, PHYSFS_uint32 *val)
Jul 10, 2002
Jul 10, 2002
158
159
160
161
162
163
164
165
166
{
PHYSFS_uint32 in;
BAIL_IF_MACRO(val == NULL, ERR_INVALID_ARGUMENT, 0);
BAIL_IF_MACRO(PHYSFS_read(file, &in, sizeof (in), 1) != 1, NULL, 0);
*val = PHYSFS_swapULE32(in);
return(1);
} /* PHYSFS_readULE32 */
Sep 26, 2004
Sep 26, 2004
167
int PHYSFS_readSBE32(PHYSFS_File *file, PHYSFS_sint32 *val)
Jul 10, 2002
Jul 10, 2002
168
169
170
171
172
173
174
175
176
{
PHYSFS_sint32 in;
BAIL_IF_MACRO(val == NULL, ERR_INVALID_ARGUMENT, 0);
BAIL_IF_MACRO(PHYSFS_read(file, &in, sizeof (in), 1) != 1, NULL, 0);
*val = PHYSFS_swapSBE32(in);
return(1);
} /* PHYSFS_readSBE32 */
Sep 26, 2004
Sep 26, 2004
177
int PHYSFS_readUBE32(PHYSFS_File *file, PHYSFS_uint32 *val)
Jul 10, 2002
Jul 10, 2002
178
179
180
181
182
183
184
185
186
{
PHYSFS_uint32 in;
BAIL_IF_MACRO(val == NULL, ERR_INVALID_ARGUMENT, 0);
BAIL_IF_MACRO(PHYSFS_read(file, &in, sizeof (in), 1) != 1, NULL, 0);
*val = PHYSFS_swapUBE32(in);
return(1);
} /* PHYSFS_readUBE32 */
Sep 26, 2004
Sep 26, 2004
187
int PHYSFS_readSLE64(PHYSFS_File *file, PHYSFS_sint64 *val)
Jul 10, 2002
Jul 10, 2002
188
189
190
191
192
193
194
195
196
{
PHYSFS_sint64 in;
BAIL_IF_MACRO(val == NULL, ERR_INVALID_ARGUMENT, 0);
BAIL_IF_MACRO(PHYSFS_read(file, &in, sizeof (in), 1) != 1, NULL, 0);
*val = PHYSFS_swapSLE64(in);
return(1);
} /* PHYSFS_readSLE64 */
Sep 26, 2004
Sep 26, 2004
197
int PHYSFS_readULE64(PHYSFS_File *file, PHYSFS_uint64 *val)
Jul 10, 2002
Jul 10, 2002
198
199
200
201
202
203
204
205
206
{
PHYSFS_uint64 in;
BAIL_IF_MACRO(val == NULL, ERR_INVALID_ARGUMENT, 0);
BAIL_IF_MACRO(PHYSFS_read(file, &in, sizeof (in), 1) != 1, NULL, 0);
*val = PHYSFS_swapULE64(in);
return(1);
} /* PHYSFS_readULE64 */
Sep 26, 2004
Sep 26, 2004
207
int PHYSFS_readSBE64(PHYSFS_File *file, PHYSFS_sint64 *val)
Jul 10, 2002
Jul 10, 2002
208
209
210
211
212
213
214
215
216
{
PHYSFS_sint64 in;
BAIL_IF_MACRO(val == NULL, ERR_INVALID_ARGUMENT, 0);
BAIL_IF_MACRO(PHYSFS_read(file, &in, sizeof (in), 1) != 1, NULL, 0);
*val = PHYSFS_swapSBE64(in);
return(1);
} /* PHYSFS_readSBE64 */
Sep 26, 2004
Sep 26, 2004
217
int PHYSFS_readUBE64(PHYSFS_File *file, PHYSFS_uint64 *val)
Jul 10, 2002
Jul 10, 2002
218
219
220
221
222
223
224
225
226
227
{
PHYSFS_uint64 in;
BAIL_IF_MACRO(val == NULL, ERR_INVALID_ARGUMENT, 0);
BAIL_IF_MACRO(PHYSFS_read(file, &in, sizeof (in), 1) != 1, NULL, 0);
*val = PHYSFS_swapUBE64(in);
return(1);
} /* PHYSFS_readUBE64 */
Sep 26, 2004
Sep 26, 2004
228
int PHYSFS_writeSLE16(PHYSFS_File *file, PHYSFS_sint16 val)
Jul 10, 2002
Jul 10, 2002
229
230
231
232
233
234
235
{
PHYSFS_sint16 out = PHYSFS_swapSLE16(val);
BAIL_IF_MACRO(PHYSFS_write(file, &out, sizeof (out), 1) != 1, NULL, 0);
return(1);
} /* PHYSFS_writeSLE16 */
Sep 26, 2004
Sep 26, 2004
236
int PHYSFS_writeULE16(PHYSFS_File *file, PHYSFS_uint16 val)
Jul 10, 2002
Jul 10, 2002
237
238
239
240
241
242
243
{
PHYSFS_uint16 out = PHYSFS_swapULE16(val);
BAIL_IF_MACRO(PHYSFS_write(file, &out, sizeof (out), 1) != 1, NULL, 0);
return(1);
} /* PHYSFS_writeULE16 */
Sep 26, 2004
Sep 26, 2004
244
int PHYSFS_writeSBE16(PHYSFS_File *file, PHYSFS_sint16 val)
Jul 10, 2002
Jul 10, 2002
245
246
247
248
249
250
251
{
PHYSFS_sint16 out = PHYSFS_swapSBE16(val);
BAIL_IF_MACRO(PHYSFS_write(file, &out, sizeof (out), 1) != 1, NULL, 0);
return(1);
} /* PHYSFS_writeSBE16 */
Sep 26, 2004
Sep 26, 2004
252
int PHYSFS_writeUBE16(PHYSFS_File *file, PHYSFS_uint16 val)
Jul 10, 2002
Jul 10, 2002
253
254
255
256
257
258
259
{
PHYSFS_uint16 out = PHYSFS_swapUBE16(val);
BAIL_IF_MACRO(PHYSFS_write(file, &out, sizeof (out), 1) != 1, NULL, 0);
return(1);
} /* PHYSFS_writeUBE16 */
Sep 26, 2004
Sep 26, 2004
260
int PHYSFS_writeSLE32(PHYSFS_File *file, PHYSFS_sint32 val)
Jul 10, 2002
Jul 10, 2002
261
262
263
264
265
266
267
{
PHYSFS_sint32 out = PHYSFS_swapSLE32(val);
BAIL_IF_MACRO(PHYSFS_write(file, &out, sizeof (out), 1) != 1, NULL, 0);
return(1);
} /* PHYSFS_writeSLE32 */
Sep 26, 2004
Sep 26, 2004
268
int PHYSFS_writeULE32(PHYSFS_File *file, PHYSFS_uint32 val)
Jul 10, 2002
Jul 10, 2002
269
270
271
272
273
274
275
{
PHYSFS_uint32 out = PHYSFS_swapULE32(val);
BAIL_IF_MACRO(PHYSFS_write(file, &out, sizeof (out), 1) != 1, NULL, 0);
return(1);
} /* PHYSFS_writeULE32 */
Sep 26, 2004
Sep 26, 2004
276
int PHYSFS_writeSBE32(PHYSFS_File *file, PHYSFS_sint32 val)
Jul 10, 2002
Jul 10, 2002
277
278
279
280
281
282
283
{
PHYSFS_sint32 out = PHYSFS_swapSBE32(val);
BAIL_IF_MACRO(PHYSFS_write(file, &out, sizeof (out), 1) != 1, NULL, 0);
return(1);
} /* PHYSFS_writeSBE32 */
Sep 26, 2004
Sep 26, 2004
284
int PHYSFS_writeUBE32(PHYSFS_File *file, PHYSFS_uint32 val)
Jul 10, 2002
Jul 10, 2002
285
286
287
288
289
290
291
{
PHYSFS_uint32 out = PHYSFS_swapUBE32(val);
BAIL_IF_MACRO(PHYSFS_write(file, &out, sizeof (out), 1) != 1, NULL, 0);
return(1);
} /* PHYSFS_writeUBE32 */
Sep 26, 2004
Sep 26, 2004
292
int PHYSFS_writeSLE64(PHYSFS_File *file, PHYSFS_sint64 val)
Jul 10, 2002
Jul 10, 2002
293
294
295
296
297
298
299
{
PHYSFS_sint64 out = PHYSFS_swapSLE64(val);
BAIL_IF_MACRO(PHYSFS_write(file, &out, sizeof (out), 1) != 1, NULL, 0);
return(1);
} /* PHYSFS_writeSLE64 */
Sep 26, 2004
Sep 26, 2004
300
int PHYSFS_writeULE64(PHYSFS_File *file, PHYSFS_uint64 val)
Jul 10, 2002
Jul 10, 2002
301
302
303
304
305
306
307
{
PHYSFS_uint64 out = PHYSFS_swapULE64(val);
BAIL_IF_MACRO(PHYSFS_write(file, &out, sizeof (out), 1) != 1, NULL, 0);
return(1);
} /* PHYSFS_writeULE64 */
Sep 26, 2004
Sep 26, 2004
308
int PHYSFS_writeSBE64(PHYSFS_File *file, PHYSFS_sint64 val)
Jul 10, 2002
Jul 10, 2002
309
310
311
312
313
314
315
{
PHYSFS_sint64 out = PHYSFS_swapSBE64(val);
BAIL_IF_MACRO(PHYSFS_write(file, &out, sizeof (out), 1) != 1, NULL, 0);
return(1);
} /* PHYSFS_writeSBE64 */
Sep 26, 2004
Sep 26, 2004
316
int PHYSFS_writeUBE64(PHYSFS_File *file, PHYSFS_uint64 val)
Jul 10, 2002
Jul 10, 2002
317
318
319
320
321
322
{
PHYSFS_uint64 out = PHYSFS_swapUBE64(val);
BAIL_IF_MACRO(PHYSFS_write(file, &out, sizeof (out), 1) != 1, NULL, 0);
return(1);
} /* PHYSFS_writeUBE64 */
Apr 5, 2002
Apr 5, 2002
323
/* end of physfs_byteorder.c ... */