Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Latest commit

 

History

History
563 lines (477 loc) · 14.1 KB

SDL_rwops.c

File metadata and controls

563 lines (477 loc) · 14.1 KB
 
Apr 26, 2001
Apr 26, 2001
1
2
/*
SDL - Simple DirectMedia Layer
Feb 1, 2006
Feb 1, 2006
3
Copyright (C) 1997-2006 Sam Lantinga
Apr 26, 2001
Apr 26, 2001
4
5
This library is free software; you can redistribute it and/or
Feb 1, 2006
Feb 1, 2006
6
modify it under the terms of the GNU Lesser General Public
Apr 26, 2001
Apr 26, 2001
7
License as published by the Free Software Foundation; either
Feb 1, 2006
Feb 1, 2006
8
version 2.1 of the License, or (at your option) any later version.
Apr 26, 2001
Apr 26, 2001
9
10
11
12
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Feb 1, 2006
Feb 1, 2006
13
Lesser General Public License for more details.
Apr 26, 2001
Apr 26, 2001
14
Feb 1, 2006
Feb 1, 2006
15
16
17
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Apr 26, 2001
Apr 26, 2001
18
19
Sam Lantinga
Dec 14, 2001
Dec 14, 2001
20
slouken@libsdl.org
Apr 26, 2001
Apr 26, 2001
21
*/
Feb 21, 2006
Feb 21, 2006
22
#include "SDL_config.h"
Apr 26, 2001
Apr 26, 2001
23
24
25
26
27
/* This file provides a general interface for SDL to read and write
data sources. It can easily be extended to files, memory, etc.
*/
Feb 9, 2006
Feb 9, 2006
28
#include "SDL_endian.h"
Feb 7, 2006
Feb 7, 2006
29
#include "SDL_rwops.h"
Feb 6, 2006
Feb 6, 2006
30
Feb 9, 2006
Feb 9, 2006
31
Mar 4, 2006
Mar 4, 2006
32
#if defined(__WIN32__)
Apr 26, 2001
Apr 26, 2001
33
Feb 27, 2006
Feb 27, 2006
34
/* Functions to read/write Win32 API file pointers */
Mar 4, 2006
Mar 4, 2006
35
36
37
/* Will not use it on WinCE because stdio is buffered, it means
faster, and all stdio functions anyway are embedded in coredll.dll -
the main wince dll*/
Apr 26, 2001
Apr 26, 2001
38
Feb 27, 2006
Feb 27, 2006
39
40
41
#define WINDOWS_LEAN_AND_MEAN
#include <windows.h>
Mar 4, 2006
Mar 4, 2006
42
43
44
45
#ifndef INVALID_SET_FILE_POINTER
#define INVALID_SET_FILE_POINTER 0xFFFFFFFF
#endif
Jul 10, 2006
Jul 10, 2006
46
47
static int SDLCALL
win32_file_open(SDL_RWops * context, const char *filename, const char *mode)
Mar 4, 2006
Mar 4, 2006
48
49
{
#ifndef _WIN32_WCE
Jul 10, 2006
Jul 10, 2006
50
UINT old_error_mode;
Mar 4, 2006
Mar 4, 2006
51
#endif
Jul 10, 2006
Jul 10, 2006
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
HANDLE h;
DWORD r_right, w_right;
DWORD must_exist, truncate;
int a_mode;
if (!context)
return -1;
context->hidden.win32io.h = INVALID_HANDLE_VALUE; /* mark this as unusable */
/* "r" = reading, file must exist */
/* "w" = writing, truncate existing, file may not exist */
/* "r+"= reading or writing, file must exist */
/* "a" = writing, append file may not exist */
/* "a+"= append + read, file may not exist */
/* "w+" = read, write, truncate. file may not exist */
must_exist = (SDL_strchr(mode, 'r') != NULL) ? OPEN_EXISTING : 0;
truncate = (SDL_strchr(mode, 'w') != NULL) ? CREATE_ALWAYS : 0;
r_right = (SDL_strchr(mode, '+') != NULL
|| must_exist) ? GENERIC_READ : 0;
a_mode = (SDL_strchr(mode, 'a') != NULL) ? OPEN_ALWAYS : 0;
w_right = (a_mode || SDL_strchr(mode, '+')
|| truncate) ? GENERIC_WRITE : 0;
if (!r_right && !w_right) /* inconsistent mode */
return -1; /* failed (invalid call) */
Mar 4, 2006
Mar 4, 2006
79
80
#ifdef _WIN32_WCE
Jul 10, 2006
Jul 10, 2006
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
{
size_t size = SDL_strlen(filename) + 1;
wchar_t *filenameW = SDL_stack_alloc(wchar_t, size);
if (MultiByteToWideChar(CP_UTF8, 0, filename, -1, filenameW, size) ==
0) {
SDL_SetError("Unable to convert filename to Unicode");
SDL_stack_free(filenameW);
return -1;
}
h = CreateFile(filenameW, (w_right | r_right),
(w_right) ? 0 : FILE_SHARE_READ, NULL,
(must_exist | truncate | a_mode),
FILE_ATTRIBUTE_NORMAL, NULL);
SDL_stack_free(filenameW);
}
Mar 4, 2006
Mar 4, 2006
97
#else
Jul 10, 2006
Jul 10, 2006
98
99
100
/* Do not open a dialog box if failure */
old_error_mode =
SetErrorMode(SEM_NOOPENFILEERRORBOX | SEM_FAILCRITICALERRORS);
Mar 4, 2006
Mar 4, 2006
101
Jul 10, 2006
Jul 10, 2006
102
103
104
105
h = CreateFile(filename, (w_right | r_right),
(w_right) ? 0 : FILE_SHARE_READ, NULL,
(must_exist | truncate | a_mode), FILE_ATTRIBUTE_NORMAL,
NULL);
Mar 4, 2006
Mar 4, 2006
106
Jul 10, 2006
Jul 10, 2006
107
108
/* restore old behaviour */
SetErrorMode(old_error_mode);
Mar 4, 2006
Mar 4, 2006
109
#endif /* _WIN32_WCE */
Feb 27, 2006
Feb 27, 2006
110
Jul 10, 2006
Jul 10, 2006
111
112
113
114
115
116
117
118
if (h == INVALID_HANDLE_VALUE) {
SDL_SetError("Couldn't open %s", filename);
return -2; /* failed (CreateFile) */
}
context->hidden.win32io.h = h;
context->hidden.win32io.append = a_mode;
return 0; /* ok */
Feb 27, 2006
Feb 27, 2006
119
}
Jul 10, 2006
Jul 10, 2006
120
121
122
123
124
static int SDLCALL
win32_file_seek(SDL_RWops * context, int offset, int whence)
{
DWORD win32whence;
int file_pos;
Feb 27, 2006
Feb 27, 2006
125
Jul 10, 2006
Jul 10, 2006
126
127
128
129
if (!context || context->hidden.win32io.h == INVALID_HANDLE_VALUE) {
SDL_SetError("win32_file_seek: invalid context/file not opened");
return -1;
}
Feb 27, 2006
Feb 27, 2006
130
Jul 10, 2006
Jul 10, 2006
131
132
133
134
135
136
137
138
139
140
141
142
143
144
switch (whence) {
case RW_SEEK_SET:
win32whence = FILE_BEGIN;
break;
case RW_SEEK_CUR:
win32whence = FILE_CURRENT;
break;
case RW_SEEK_END:
win32whence = FILE_END;
break;
default:
SDL_SetError("win32_file_seek: Unknown value for 'whence'");
return -1;
}
Feb 27, 2006
Feb 27, 2006
145
Jul 10, 2006
Jul 10, 2006
146
147
148
149
150
file_pos =
SetFilePointer(context->hidden.win32io.h, offset, NULL, win32whence);
if (file_pos != INVALID_SET_FILE_POINTER)
return file_pos; /* success */
Feb 27, 2006
Feb 27, 2006
151
Jul 10, 2006
Jul 10, 2006
152
153
SDL_Error(SDL_EFSEEK);
return -1; /* error */
Feb 27, 2006
Feb 27, 2006
154
}
Jul 10, 2006
Jul 10, 2006
155
156
static int SDLCALL
win32_file_read(SDL_RWops * context, void *ptr, int size, int maxnum)
Feb 27, 2006
Feb 27, 2006
157
158
{
Jul 10, 2006
Jul 10, 2006
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
int total_bytes;
DWORD byte_read, nread;
total_bytes = size * maxnum;
if (!context || context->hidden.win32io.h == INVALID_HANDLE_VALUE
|| total_bytes <= 0 || !size)
return 0;
if (!ReadFile
(context->hidden.win32io.h, ptr, total_bytes, &byte_read, NULL)) {
SDL_Error(SDL_EFREAD);
return 0;
}
nread = byte_read / size;
return nread;
Feb 27, 2006
Feb 27, 2006
175
}
Jul 10, 2006
Jul 10, 2006
176
177
static int SDLCALL
win32_file_write(SDL_RWops * context, const void *ptr, int size, int num)
Feb 27, 2006
Feb 27, 2006
178
{
Feb 6, 2006
Feb 6, 2006
179
Jul 10, 2006
Jul 10, 2006
180
181
int total_bytes;
DWORD byte_written, nwritten;
Apr 26, 2001
Apr 26, 2001
182
Jul 10, 2006
Jul 10, 2006
183
184
185
186
187
188
189
190
191
192
193
194
195
196
total_bytes = size * num;
if (!context || context->hidden.win32io.h == INVALID_HANDLE_VALUE
|| total_bytes <= 0 || !size)
return 0;
/* if in append mode, we must go to the EOF before write */
if (context->hidden.win32io.append) {
if (SetFilePointer(context->hidden.win32io.h, 0L, NULL, FILE_END)
== INVALID_SET_FILE_POINTER) {
SDL_Error(SDL_EFWRITE);
return 0;
}
}
Apr 26, 2001
Apr 26, 2001
197
Jul 10, 2006
Jul 10, 2006
198
199
200
201
202
203
204
205
if (!WriteFile
(context->hidden.win32io.h, ptr, total_bytes, &byte_written, NULL)) {
SDL_Error(SDL_EFWRITE);
return 0;
}
nwritten = byte_written / size;
return nwritten;
Apr 26, 2001
Apr 26, 2001
206
}
Jul 10, 2006
Jul 10, 2006
207
208
static int SDLCALL
win32_file_close(SDL_RWops * context)
Apr 26, 2001
Apr 26, 2001
209
210
{
Jul 10, 2006
Jul 10, 2006
211
212
213
214
215
216
217
218
219
220
if (context) {
if (context->hidden.win32io.h != INVALID_HANDLE_VALUE) {
CloseHandle(context->hidden.win32io.h);
context->hidden.win32io.h = INVALID_HANDLE_VALUE; /* to be sure */
}
SDL_FreeRW(context);
}
return (0);
}
#endif /* __WIN32__ */
Jun 24, 2005
Jun 24, 2005
221
Jul 10, 2006
Jul 10, 2006
222
#ifdef HAVE_STDIO_H
Jun 24, 2005
Jun 24, 2005
223
Jul 10, 2006
Jul 10, 2006
224
/* Functions to read/write stdio file pointers */
Jun 24, 2005
Jun 24, 2005
225
Jul 10, 2006
Jul 10, 2006
226
227
228
229
230
231
232
233
234
static int SDLCALL
stdio_seek(SDL_RWops * context, int offset, int whence)
{
if (fseek(context->hidden.stdio.fp, offset, whence) == 0) {
return (ftell(context->hidden.stdio.fp));
} else {
SDL_Error(SDL_EFSEEK);
return (-1);
}
Apr 26, 2001
Apr 26, 2001
235
}
Jul 10, 2006
Jul 10, 2006
236
237
static int SDLCALL
stdio_read(SDL_RWops * context, void *ptr, int size, int maxnum)
Apr 26, 2001
Apr 26, 2001
238
{
Jul 10, 2006
Jul 10, 2006
239
240
241
242
243
244
245
size_t nread;
nread = fread(ptr, size, maxnum, context->hidden.stdio.fp);
if (nread == 0 && ferror(context->hidden.stdio.fp)) {
SDL_Error(SDL_EFREAD);
}
return (nread);
Apr 26, 2001
Apr 26, 2001
246
}
Jul 10, 2006
Jul 10, 2006
247
248
static int SDLCALL
stdio_write(SDL_RWops * context, const void *ptr, int size, int num)
Jan 4, 2004
Jan 4, 2004
249
{
Jul 10, 2006
Jul 10, 2006
250
251
252
253
254
255
256
size_t nwrote;
nwrote = fwrite(ptr, size, num, context->hidden.stdio.fp);
if (nwrote == 0 && ferror(context->hidden.stdio.fp)) {
SDL_Error(SDL_EFWRITE);
}
return (nwrote);
Jan 4, 2004
Jan 4, 2004
257
}
Jul 10, 2006
Jul 10, 2006
258
259
static int SDLCALL
stdio_close(SDL_RWops * context)
Apr 26, 2001
Apr 26, 2001
260
{
Jul 10, 2006
Jul 10, 2006
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
if (context) {
if (context->hidden.stdio.autoclose) {
/* WARNING: Check the return value here! */
fclose(context->hidden.stdio.fp);
}
SDL_FreeRW(context);
}
return (0);
}
#endif /* !HAVE_STDIO_H */
/* Functions to read/write memory pointers */
static int SDLCALL
mem_seek(SDL_RWops * context, int offset, int whence)
{
Uint8 *newpos;
switch (whence) {
case RW_SEEK_SET:
newpos = context->hidden.mem.base + offset;
break;
case RW_SEEK_CUR:
newpos = context->hidden.mem.here + offset;
break;
case RW_SEEK_END:
newpos = context->hidden.mem.stop + offset;
break;
default:
SDL_SetError("Unknown value for 'whence'");
return (-1);
}
if (newpos < context->hidden.mem.base) {
newpos = context->hidden.mem.base;
}
if (newpos > context->hidden.mem.stop) {
newpos = context->hidden.mem.stop;
}
context->hidden.mem.here = newpos;
return (context->hidden.mem.here - context->hidden.mem.base);
}
static int SDLCALL
mem_read(SDL_RWops * context, void *ptr, int size, int maxnum)
{
size_t total_bytes;
size_t mem_available;
total_bytes = (maxnum * size);
if ((maxnum <= 0) || (size <= 0)
|| ((total_bytes / maxnum) != (size_t) size)) {
return 0;
}
mem_available = (context->hidden.mem.stop - context->hidden.mem.here);
if (total_bytes > mem_available) {
total_bytes = mem_available;
}
SDL_memcpy(ptr, context->hidden.mem.here, total_bytes);
context->hidden.mem.here += total_bytes;
return (total_bytes / size);
}
static int SDLCALL
mem_write(SDL_RWops * context, const void *ptr, int size, int num)
{
if ((context->hidden.mem.here + (num * size)) > context->hidden.mem.stop) {
num = (context->hidden.mem.stop - context->hidden.mem.here) / size;
}
SDL_memcpy(context->hidden.mem.here, ptr, num * size);
context->hidden.mem.here += num * size;
return (num);
}
static int SDLCALL
mem_writeconst(SDL_RWops * context, const void *ptr, int size, int num)
{
SDL_SetError("Can't write to read-only memory");
return (-1);
}
static int SDLCALL
mem_close(SDL_RWops * context)
{
if (context) {
SDL_FreeRW(context);
}
return (0);
Apr 26, 2001
Apr 26, 2001
347
348
}
Feb 27, 2006
Feb 27, 2006
349
Apr 26, 2001
Apr 26, 2001
350
351
/* Functions to create SDL_RWops structures from various data sources */
Jul 10, 2006
Jul 10, 2006
352
353
SDL_RWops *
SDL_RWFromFile(const char *file, const char *mode)
Apr 26, 2001
Apr 26, 2001
354
{
Jul 10, 2006
Jul 10, 2006
355
SDL_RWops *rwops = NULL;
Mar 4, 2006
Mar 4, 2006
356
#ifdef HAVE_STDIO_H
Jul 10, 2006
Jul 10, 2006
357
FILE *fp = NULL;
Mar 4, 2006
Mar 4, 2006
358
#endif
Jul 10, 2006
Jul 10, 2006
359
360
361
362
if (!file || !*file || !mode || !*mode) {
SDL_SetError("SDL_RWFromFile(): No file or no mode specified");
return NULL;
}
Mar 4, 2006
Mar 4, 2006
363
#if defined(__WIN32__)
Jul 10, 2006
Jul 10, 2006
364
365
366
367
368
369
370
371
372
373
374
375
rwops = SDL_AllocRW();
if (!rwops)
return NULL; /* SDL_SetError already setup by SDL_AllocRW() */
rwops->hidden.win32io.h = INVALID_HANDLE_VALUE;
if (win32_file_open(rwops, file, mode)) {
SDL_FreeRW(rwops);
return NULL;
}
rwops->seek = win32_file_seek;
rwops->read = win32_file_read;
rwops->write = win32_file_write;
rwops->close = win32_file_close;
Feb 27, 2006
Feb 27, 2006
376
377
#elif HAVE_STDIO_H
Apr 26, 2001
Apr 26, 2001
378
Jul 10, 2006
Jul 10, 2006
379
380
381
382
383
384
fp = fopen(file, mode);
if (fp == NULL) {
SDL_SetError("Couldn't open %s", file);
} else {
rwops = SDL_RWFromFP(fp, 1);
}
Feb 27, 2006
Feb 27, 2006
385
#else
Jul 10, 2006
Jul 10, 2006
386
SDL_SetError("SDL not compiled with stdio support");
Feb 27, 2006
Feb 27, 2006
387
#endif /* !HAVE_STDIO_H */
Feb 27, 2006
Feb 27, 2006
388
Jul 10, 2006
Jul 10, 2006
389
return (rwops);
Apr 26, 2001
Apr 26, 2001
390
391
}
Feb 6, 2006
Feb 6, 2006
392
#ifdef HAVE_STDIO_H
Jul 10, 2006
Jul 10, 2006
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
SDL_RWops *
SDL_RWFromFP(FILE * fp, int autoclose)
{
SDL_RWops *rwops = NULL;
rwops = SDL_AllocRW();
if (rwops != NULL) {
rwops->seek = stdio_seek;
rwops->read = stdio_read;
rwops->write = stdio_write;
rwops->close = stdio_close;
rwops->hidden.stdio.fp = fp;
rwops->hidden.stdio.autoclose = autoclose;
}
return (rwops);
Apr 26, 2001
Apr 26, 2001
408
}
Feb 6, 2006
Feb 6, 2006
409
#endif /* HAVE_STDIO_H */
Apr 26, 2001
Apr 26, 2001
410
Jul 10, 2006
Jul 10, 2006
411
412
SDL_RWops *
SDL_RWFromMem(void *mem, int size)
Apr 26, 2001
Apr 26, 2001
413
{
Jul 10, 2006
Jul 10, 2006
414
SDL_RWops *rwops;
Apr 26, 2001
Apr 26, 2001
415
Jul 10, 2006
Jul 10, 2006
416
417
418
419
420
421
422
423
424
425
426
rwops = SDL_AllocRW();
if (rwops != NULL) {
rwops->seek = mem_seek;
rwops->read = mem_read;
rwops->write = mem_write;
rwops->close = mem_close;
rwops->hidden.mem.base = (Uint8 *) mem;
rwops->hidden.mem.here = rwops->hidden.mem.base;
rwops->hidden.mem.stop = rwops->hidden.mem.base + size;
}
return (rwops);
Apr 26, 2001
Apr 26, 2001
427
428
}
Jul 10, 2006
Jul 10, 2006
429
430
SDL_RWops *
SDL_RWFromConstMem(const void *mem, int size)
Jan 4, 2004
Jan 4, 2004
431
{
Jul 10, 2006
Jul 10, 2006
432
SDL_RWops *rwops;
Jan 4, 2004
Jan 4, 2004
433
Jul 10, 2006
Jul 10, 2006
434
435
436
437
438
439
440
441
442
443
444
rwops = SDL_AllocRW();
if (rwops != NULL) {
rwops->seek = mem_seek;
rwops->read = mem_read;
rwops->write = mem_writeconst;
rwops->close = mem_close;
rwops->hidden.mem.base = (Uint8 *) mem;
rwops->hidden.mem.here = rwops->hidden.mem.base;
rwops->hidden.mem.stop = rwops->hidden.mem.base + size;
}
return (rwops);
Jan 4, 2004
Jan 4, 2004
445
446
}
Jul 10, 2006
Jul 10, 2006
447
448
SDL_RWops *
SDL_AllocRW(void)
Apr 26, 2001
Apr 26, 2001
449
{
Jul 10, 2006
Jul 10, 2006
450
SDL_RWops *area;
Apr 26, 2001
Apr 26, 2001
451
Jul 10, 2006
Jul 10, 2006
452
453
454
455
456
area = (SDL_RWops *) SDL_malloc(sizeof *area);
if (area == NULL) {
SDL_OutOfMemory();
}
return (area);
Apr 26, 2001
Apr 26, 2001
457
458
}
Jul 10, 2006
Jul 10, 2006
459
460
void
SDL_FreeRW(SDL_RWops * area)
Apr 26, 2001
Apr 26, 2001
461
{
Jul 10, 2006
Jul 10, 2006
462
SDL_free(area);
Apr 26, 2001
Apr 26, 2001
463
}
Feb 9, 2006
Feb 9, 2006
464
465
466
/* Functions for dynamically reading and writing endian-specific values */
Jul 10, 2006
Jul 10, 2006
467
468
Uint16
SDL_ReadLE16(SDL_RWops * src)
Feb 9, 2006
Feb 9, 2006
469
{
Jul 10, 2006
Jul 10, 2006
470
Uint16 value;
Feb 9, 2006
Feb 9, 2006
471
Jul 10, 2006
Jul 10, 2006
472
473
SDL_RWread(src, &value, (sizeof value), 1);
return (SDL_SwapLE16(value));
Feb 9, 2006
Feb 9, 2006
474
}
Jul 10, 2006
Jul 10, 2006
475
476
477
Uint16
SDL_ReadBE16(SDL_RWops * src)
Feb 9, 2006
Feb 9, 2006
478
{
Jul 10, 2006
Jul 10, 2006
479
Uint16 value;
Feb 9, 2006
Feb 9, 2006
480
Jul 10, 2006
Jul 10, 2006
481
482
SDL_RWread(src, &value, (sizeof value), 1);
return (SDL_SwapBE16(value));
Feb 9, 2006
Feb 9, 2006
483
}
Jul 10, 2006
Jul 10, 2006
484
485
486
Uint32
SDL_ReadLE32(SDL_RWops * src)
Feb 9, 2006
Feb 9, 2006
487
{
Jul 10, 2006
Jul 10, 2006
488
Uint32 value;
Feb 9, 2006
Feb 9, 2006
489
Jul 10, 2006
Jul 10, 2006
490
491
SDL_RWread(src, &value, (sizeof value), 1);
return (SDL_SwapLE32(value));
Feb 9, 2006
Feb 9, 2006
492
}
Jul 10, 2006
Jul 10, 2006
493
494
495
Uint32
SDL_ReadBE32(SDL_RWops * src)
Feb 9, 2006
Feb 9, 2006
496
{
Jul 10, 2006
Jul 10, 2006
497
Uint32 value;
Feb 9, 2006
Feb 9, 2006
498
Jul 10, 2006
Jul 10, 2006
499
500
SDL_RWread(src, &value, (sizeof value), 1);
return (SDL_SwapBE32(value));
Feb 9, 2006
Feb 9, 2006
501
}
Jul 10, 2006
Jul 10, 2006
502
503
504
Uint64
SDL_ReadLE64(SDL_RWops * src)
Feb 9, 2006
Feb 9, 2006
505
{
Jul 10, 2006
Jul 10, 2006
506
Uint64 value;
Feb 9, 2006
Feb 9, 2006
507
Jul 10, 2006
Jul 10, 2006
508
509
SDL_RWread(src, &value, (sizeof value), 1);
return (SDL_SwapLE64(value));
Feb 9, 2006
Feb 9, 2006
510
}
Jul 10, 2006
Jul 10, 2006
511
512
513
Uint64
SDL_ReadBE64(SDL_RWops * src)
Feb 9, 2006
Feb 9, 2006
514
{
Jul 10, 2006
Jul 10, 2006
515
Uint64 value;
Feb 9, 2006
Feb 9, 2006
516
Jul 10, 2006
Jul 10, 2006
517
518
SDL_RWread(src, &value, (sizeof value), 1);
return (SDL_SwapBE64(value));
Feb 9, 2006
Feb 9, 2006
519
520
}
Jul 10, 2006
Jul 10, 2006
521
522
int
SDL_WriteLE16(SDL_RWops * dst, Uint16 value)
Feb 9, 2006
Feb 9, 2006
523
{
Jul 10, 2006
Jul 10, 2006
524
525
value = SDL_SwapLE16(value);
return (SDL_RWwrite(dst, &value, (sizeof value), 1));
Feb 9, 2006
Feb 9, 2006
526
}
Jul 10, 2006
Jul 10, 2006
527
528
529
int
SDL_WriteBE16(SDL_RWops * dst, Uint16 value)
Feb 9, 2006
Feb 9, 2006
530
{
Jul 10, 2006
Jul 10, 2006
531
532
value = SDL_SwapBE16(value);
return (SDL_RWwrite(dst, &value, (sizeof value), 1));
Feb 9, 2006
Feb 9, 2006
533
}
Jul 10, 2006
Jul 10, 2006
534
535
536
int
SDL_WriteLE32(SDL_RWops * dst, Uint32 value)
Feb 9, 2006
Feb 9, 2006
537
{
Jul 10, 2006
Jul 10, 2006
538
539
value = SDL_SwapLE32(value);
return (SDL_RWwrite(dst, &value, (sizeof value), 1));
Feb 9, 2006
Feb 9, 2006
540
}
Jul 10, 2006
Jul 10, 2006
541
542
543
int
SDL_WriteBE32(SDL_RWops * dst, Uint32 value)
Feb 9, 2006
Feb 9, 2006
544
{
Jul 10, 2006
Jul 10, 2006
545
546
value = SDL_SwapBE32(value);
return (SDL_RWwrite(dst, &value, (sizeof value), 1));
Feb 9, 2006
Feb 9, 2006
547
}
Jul 10, 2006
Jul 10, 2006
548
549
550
int
SDL_WriteLE64(SDL_RWops * dst, Uint64 value)
Feb 9, 2006
Feb 9, 2006
551
{
Jul 10, 2006
Jul 10, 2006
552
553
value = SDL_SwapLE64(value);
return (SDL_RWwrite(dst, &value, (sizeof value), 1));
Feb 9, 2006
Feb 9, 2006
554
}
Jul 10, 2006
Jul 10, 2006
555
556
557
int
SDL_WriteBE64(SDL_RWops * dst, Uint64 value)
Feb 9, 2006
Feb 9, 2006
558
{
Jul 10, 2006
Jul 10, 2006
559
560
value = SDL_SwapBE64(value);
return (SDL_RWwrite(dst, &value, (sizeof value), 1));
Feb 9, 2006
Feb 9, 2006
561
}
Jul 10, 2006
Jul 10, 2006
562
563
/* vi: set ts=4 sw=4 expandtab: */