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

Latest commit

 

History

History
616 lines (529 loc) · 15.5 KB

SDL_rwops.c

File metadata and controls

616 lines (529 loc) · 15.5 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 */
Feb 21, 2006
Feb 21, 2006
352
#ifdef __MACOS__
Apr 26, 2001
Apr 26, 2001
353
354
355
356
/*
* translate unix-style slash-separated filename to mac-style colon-separated
* name; return malloced string
*/
Jul 10, 2006
Jul 10, 2006
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
static char *
unix_to_mac(const char *file)
{
int flen = SDL_strlen(file);
char *path = SDL_malloc(flen + 2);
const char *src = file;
char *dst = path;
if (*src == '/') {
/* really depends on filesystem layout, hope for the best */
src++;
} else {
/* Check if this is a MacOS path to begin with */
if (*src != ':')
*dst++ = ':'; /* relative paths begin with ':' */
}
while (src < file + flen) {
const char *end = SDL_strchr(src, '/');
int len;
if (!end)
end = file + flen; /* last component */
len = end - src;
if (len == 0 || (len == 1 && src[0] == '.')) {
/* remove repeated slashes and . */
} else {
if (len == 2 && src[0] == '.' && src[1] == '.') {
/* replace .. with the empty string */
} else {
SDL_memcpy(dst, src, len);
dst += len;
}
if (end < file + flen)
*dst++ = ':';
}
src = end + 1;
}
*dst++ = '\0';
return path;
Apr 26, 2001
Apr 26, 2001
394
}
Feb 21, 2006
Feb 21, 2006
395
#endif /* __MACOS__ */
Apr 26, 2001
Apr 26, 2001
396
Jul 10, 2006
Jul 10, 2006
397
398
SDL_RWops *
SDL_RWFromFile(const char *file, const char *mode)
Apr 26, 2001
Apr 26, 2001
399
{
Jul 10, 2006
Jul 10, 2006
400
SDL_RWops *rwops = NULL;
Mar 4, 2006
Mar 4, 2006
401
#ifdef HAVE_STDIO_H
Jul 10, 2006
Jul 10, 2006
402
FILE *fp = NULL;
Mar 4, 2006
Mar 4, 2006
403
#endif
Jul 10, 2006
Jul 10, 2006
404
405
406
407
if (!file || !*file || !mode || !*mode) {
SDL_SetError("SDL_RWFromFile(): No file or no mode specified");
return NULL;
}
Mar 4, 2006
Mar 4, 2006
408
#if defined(__WIN32__)
Jul 10, 2006
Jul 10, 2006
409
410
411
412
413
414
415
416
417
418
419
420
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
421
422
#elif HAVE_STDIO_H
Apr 26, 2001
Apr 26, 2001
423
Feb 21, 2006
Feb 21, 2006
424
#ifdef __MACOS__
Jul 10, 2006
Jul 10, 2006
425
426
427
428
429
{
char *mpath = unix_to_mac(file);
fp = fopen(mpath, mode);
SDL_free(mpath);
}
Apr 26, 2001
Apr 26, 2001
430
#else
Jul 10, 2006
Jul 10, 2006
431
fp = fopen(file, mode);
Apr 26, 2001
Apr 26, 2001
432
#endif
Jul 10, 2006
Jul 10, 2006
433
434
435
436
437
if (fp == NULL) {
SDL_SetError("Couldn't open %s", file);
} else {
rwops = SDL_RWFromFP(fp, 1);
}
Feb 27, 2006
Feb 27, 2006
438
#else
Jul 10, 2006
Jul 10, 2006
439
SDL_SetError("SDL not compiled with stdio support");
Feb 27, 2006
Feb 27, 2006
440
#endif /* !HAVE_STDIO_H */
Feb 27, 2006
Feb 27, 2006
441
Jul 10, 2006
Jul 10, 2006
442
return (rwops);
Apr 26, 2001
Apr 26, 2001
443
444
}
Feb 6, 2006
Feb 6, 2006
445
#ifdef HAVE_STDIO_H
Jul 10, 2006
Jul 10, 2006
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
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
461
}
Feb 6, 2006
Feb 6, 2006
462
#endif /* HAVE_STDIO_H */
Apr 26, 2001
Apr 26, 2001
463
Jul 10, 2006
Jul 10, 2006
464
465
SDL_RWops *
SDL_RWFromMem(void *mem, int size)
Apr 26, 2001
Apr 26, 2001
466
{
Jul 10, 2006
Jul 10, 2006
467
SDL_RWops *rwops;
Apr 26, 2001
Apr 26, 2001
468
Jul 10, 2006
Jul 10, 2006
469
470
471
472
473
474
475
476
477
478
479
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
480
481
}
Jul 10, 2006
Jul 10, 2006
482
483
SDL_RWops *
SDL_RWFromConstMem(const void *mem, int size)
Jan 4, 2004
Jan 4, 2004
484
{
Jul 10, 2006
Jul 10, 2006
485
SDL_RWops *rwops;
Jan 4, 2004
Jan 4, 2004
486
Jul 10, 2006
Jul 10, 2006
487
488
489
490
491
492
493
494
495
496
497
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
498
499
}
Jul 10, 2006
Jul 10, 2006
500
501
SDL_RWops *
SDL_AllocRW(void)
Apr 26, 2001
Apr 26, 2001
502
{
Jul 10, 2006
Jul 10, 2006
503
SDL_RWops *area;
Apr 26, 2001
Apr 26, 2001
504
Jul 10, 2006
Jul 10, 2006
505
506
507
508
509
area = (SDL_RWops *) SDL_malloc(sizeof *area);
if (area == NULL) {
SDL_OutOfMemory();
}
return (area);
Apr 26, 2001
Apr 26, 2001
510
511
}
Jul 10, 2006
Jul 10, 2006
512
513
void
SDL_FreeRW(SDL_RWops * area)
Apr 26, 2001
Apr 26, 2001
514
{
Jul 10, 2006
Jul 10, 2006
515
SDL_free(area);
Apr 26, 2001
Apr 26, 2001
516
}
Feb 9, 2006
Feb 9, 2006
517
518
519
/* Functions for dynamically reading and writing endian-specific values */
Jul 10, 2006
Jul 10, 2006
520
521
Uint16
SDL_ReadLE16(SDL_RWops * src)
Feb 9, 2006
Feb 9, 2006
522
{
Jul 10, 2006
Jul 10, 2006
523
Uint16 value;
Feb 9, 2006
Feb 9, 2006
524
Jul 10, 2006
Jul 10, 2006
525
526
SDL_RWread(src, &value, (sizeof value), 1);
return (SDL_SwapLE16(value));
Feb 9, 2006
Feb 9, 2006
527
}
Jul 10, 2006
Jul 10, 2006
528
529
530
Uint16
SDL_ReadBE16(SDL_RWops * src)
Feb 9, 2006
Feb 9, 2006
531
{
Jul 10, 2006
Jul 10, 2006
532
Uint16 value;
Feb 9, 2006
Feb 9, 2006
533
Jul 10, 2006
Jul 10, 2006
534
535
SDL_RWread(src, &value, (sizeof value), 1);
return (SDL_SwapBE16(value));
Feb 9, 2006
Feb 9, 2006
536
}
Jul 10, 2006
Jul 10, 2006
537
538
539
Uint32
SDL_ReadLE32(SDL_RWops * src)
Feb 9, 2006
Feb 9, 2006
540
{
Jul 10, 2006
Jul 10, 2006
541
Uint32 value;
Feb 9, 2006
Feb 9, 2006
542
Jul 10, 2006
Jul 10, 2006
543
544
SDL_RWread(src, &value, (sizeof value), 1);
return (SDL_SwapLE32(value));
Feb 9, 2006
Feb 9, 2006
545
}
Jul 10, 2006
Jul 10, 2006
546
547
548
Uint32
SDL_ReadBE32(SDL_RWops * src)
Feb 9, 2006
Feb 9, 2006
549
{
Jul 10, 2006
Jul 10, 2006
550
Uint32 value;
Feb 9, 2006
Feb 9, 2006
551
Jul 10, 2006
Jul 10, 2006
552
553
SDL_RWread(src, &value, (sizeof value), 1);
return (SDL_SwapBE32(value));
Feb 9, 2006
Feb 9, 2006
554
}
Jul 10, 2006
Jul 10, 2006
555
556
557
Uint64
SDL_ReadLE64(SDL_RWops * src)
Feb 9, 2006
Feb 9, 2006
558
{
Jul 10, 2006
Jul 10, 2006
559
Uint64 value;
Feb 9, 2006
Feb 9, 2006
560
Jul 10, 2006
Jul 10, 2006
561
562
SDL_RWread(src, &value, (sizeof value), 1);
return (SDL_SwapLE64(value));
Feb 9, 2006
Feb 9, 2006
563
}
Jul 10, 2006
Jul 10, 2006
564
565
566
Uint64
SDL_ReadBE64(SDL_RWops * src)
Feb 9, 2006
Feb 9, 2006
567
{
Jul 10, 2006
Jul 10, 2006
568
Uint64 value;
Feb 9, 2006
Feb 9, 2006
569
Jul 10, 2006
Jul 10, 2006
570
571
SDL_RWread(src, &value, (sizeof value), 1);
return (SDL_SwapBE64(value));
Feb 9, 2006
Feb 9, 2006
572
573
}
Jul 10, 2006
Jul 10, 2006
574
575
int
SDL_WriteLE16(SDL_RWops * dst, Uint16 value)
Feb 9, 2006
Feb 9, 2006
576
{
Jul 10, 2006
Jul 10, 2006
577
578
value = SDL_SwapLE16(value);
return (SDL_RWwrite(dst, &value, (sizeof value), 1));
Feb 9, 2006
Feb 9, 2006
579
}
Jul 10, 2006
Jul 10, 2006
580
581
582
int
SDL_WriteBE16(SDL_RWops * dst, Uint16 value)
Feb 9, 2006
Feb 9, 2006
583
{
Jul 10, 2006
Jul 10, 2006
584
585
value = SDL_SwapBE16(value);
return (SDL_RWwrite(dst, &value, (sizeof value), 1));
Feb 9, 2006
Feb 9, 2006
586
}
Jul 10, 2006
Jul 10, 2006
587
588
589
int
SDL_WriteLE32(SDL_RWops * dst, Uint32 value)
Feb 9, 2006
Feb 9, 2006
590
{
Jul 10, 2006
Jul 10, 2006
591
592
value = SDL_SwapLE32(value);
return (SDL_RWwrite(dst, &value, (sizeof value), 1));
Feb 9, 2006
Feb 9, 2006
593
}
Jul 10, 2006
Jul 10, 2006
594
595
596
int
SDL_WriteBE32(SDL_RWops * dst, Uint32 value)
Feb 9, 2006
Feb 9, 2006
597
{
Jul 10, 2006
Jul 10, 2006
598
599
value = SDL_SwapBE32(value);
return (SDL_RWwrite(dst, &value, (sizeof value), 1));
Feb 9, 2006
Feb 9, 2006
600
}
Jul 10, 2006
Jul 10, 2006
601
602
603
int
SDL_WriteLE64(SDL_RWops * dst, Uint64 value)
Feb 9, 2006
Feb 9, 2006
604
{
Jul 10, 2006
Jul 10, 2006
605
606
value = SDL_SwapLE64(value);
return (SDL_RWwrite(dst, &value, (sizeof value), 1));
Feb 9, 2006
Feb 9, 2006
607
}
Jul 10, 2006
Jul 10, 2006
608
609
610
int
SDL_WriteBE64(SDL_RWops * dst, Uint64 value)
Feb 9, 2006
Feb 9, 2006
611
{
Jul 10, 2006
Jul 10, 2006
612
613
value = SDL_SwapBE64(value);
return (SDL_RWwrite(dst, &value, (sizeof value), 1));
Feb 9, 2006
Feb 9, 2006
614
}
Jul 10, 2006
Jul 10, 2006
615
616
/* vi: set ts=4 sw=4 expandtab: */