src/file/SDL_rwops.c
author Sam Lantinga <slouken@libsdl.org>
Tue, 10 Jul 2007 04:31:31 +0000
branchSDL-1.2
changeset 4027 407ecf3ad3b3
parent 4026 255b0469ca83
child 4035 3ccd06fc22e5
permissions -rw-r--r--
Fixed signed/unsigned mismatch ... hmm, limited to 2 GB reads? Fix in SDL 1.3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
     1
/*
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
     2
    SDL - Simple DirectMedia Layer
1312
c9b51268668f Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents: 1269
diff changeset
     3
    Copyright (C) 1997-2006 Sam Lantinga
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
     4
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
     5
    This library is free software; you can redistribute it and/or
1312
c9b51268668f Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents: 1269
diff changeset
     6
    modify it under the terms of the GNU Lesser General Public
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
     7
    License as published by the Free Software Foundation; either
1312
c9b51268668f Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents: 1269
diff changeset
     8
    version 2.1 of the License, or (at your option) any later version.
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
     9
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    10
    This library is distributed in the hope that it will be useful,
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    11
    but WITHOUT ANY WARRANTY; without even the implied warranty of
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    12
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1312
c9b51268668f Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents: 1269
diff changeset
    13
    Lesser General Public License for more details.
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    14
1312
c9b51268668f Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents: 1269
diff changeset
    15
    You should have received a copy of the GNU Lesser General Public
c9b51268668f Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents: 1269
diff changeset
    16
    License along with this library; if not, write to the Free Software
c9b51268668f Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents: 1269
diff changeset
    17
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    18
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    19
    Sam Lantinga
252
e8157fcb3114 Updated the source with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents: 36
diff changeset
    20
    slouken@libsdl.org
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    21
*/
1402
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1358
diff changeset
    22
#include "SDL_config.h"
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    23
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    24
/* This file provides a general interface for SDL to read and write
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    25
   data sources.  It can easily be extended to files, memory, etc.
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    26
*/
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    27
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
    28
#include "SDL_endian.h"
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    29
#include "SDL_rwops.h"
1330
450721ad5436 It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents: 1312
diff changeset
    30
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
    31
3975
e85e65aec22f Added S60 port.
Ryan C. Gordon <icculus@icculus.org>
parents: 1769
diff changeset
    32
#if defined(__WIN32__) && !defined(__SYMBIAN32__)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    33
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
    34
/* Functions to read/write Win32 API file pointers */
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    35
/* Will not use it on WinCE because stdio is buffered, it means
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    36
   faster, and all stdio functions anyway are embedded in coredll.dll - 
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    37
   the main wince dll*/
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    38
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    39
#define WINDOWS_LEAN_AND_MEAN
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    40
#include <windows.h>
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    41
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    42
#ifndef INVALID_SET_FILE_POINTER
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    43
#define INVALID_SET_FILE_POINTER 0xFFFFFFFF
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    44
#endif
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    45
4026
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
    46
#define READAHEAD_BUFFER_SIZE	1024
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
    47
1769
290b5baf2fca Fixed bug #215
Sam Lantinga <slouken@libsdl.org>
parents: 1465
diff changeset
    48
static int SDLCALL win32_file_open(SDL_RWops *context, const char *filename, const char *mode)
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    49
{
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    50
#ifndef _WIN32_WCE
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    51
	UINT	old_error_mode;
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    52
#endif
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    53
	HANDLE	h;
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    54
	DWORD	r_right, w_right;
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    55
	DWORD	must_exist, truncate;
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    56
	int		a_mode;
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    57
1455
f487bb150acc Hah, standard stdio code crashed on the test case.
Sam Lantinga <slouken@libsdl.org>
parents: 1453
diff changeset
    58
	if (!context)
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    59
		return -1;
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    60
		
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    61
	context->hidden.win32io.h = INVALID_HANDLE_VALUE; /* mark this as unusable */
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    62
4026
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
    63
	context->hidden.win32io.buffer.data = (char *)SDL_malloc(READAHEAD_BUFFER_SIZE);
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
    64
	if (!context->hidden.win32io.buffer.data) {
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
    65
		SDL_OutOfMemory();
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
    66
		return -1;
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
    67
	}
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
    68
	context->hidden.win32io.buffer.size = 0;
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
    69
	context->hidden.win32io.buffer.left = 0;
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
    70
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    71
	/* "r" = reading, file must exist */
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    72
	/* "w" = writing, truncate existing, file may not exist */
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    73
	/* "r+"= reading or writing, file must exist            */
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    74
	/* "a" = writing, append file may not exist             */
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    75
	/* "a+"= append + read, file may not exist              */
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    76
	/* "w+" = read, write, truncate. file may not exist    */
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    77
	
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    78
	must_exist = ( SDL_strchr(mode,'r') != NULL ) ? OPEN_EXISTING : 0;
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    79
	truncate   = ( SDL_strchr(mode,'w') != NULL ) ? CREATE_ALWAYS : 0;
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    80
	r_right    = ( SDL_strchr(mode,'+') != NULL || must_exist ) ? GENERIC_READ : 0;
1453
2eb75f8a32ca Date: Mon, 27 Feb 2006 17:01:43 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1447
diff changeset
    81
	a_mode     = ( SDL_strchr(mode,'a') != NULL ) ? OPEN_ALWAYS : 0;
2eb75f8a32ca Date: Mon, 27 Feb 2006 17:01:43 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1447
diff changeset
    82
	w_right    = ( a_mode || SDL_strchr(mode,'+') || truncate ) ? GENERIC_WRITE : 0;
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    83
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    84
	if (!r_right && !w_right) /* inconsistent mode */
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    85
		return -1; /* failed (invalid call)*/
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    86
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    87
#ifdef _WIN32_WCE
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    88
	{
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    89
		size_t size = SDL_strlen(filename)+1;
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    90
		wchar_t *filenameW = SDL_stack_alloc(wchar_t, size);
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    91
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    92
		if ( MultiByteToWideChar(CP_UTF8, 0, filename, -1, filenameW, size) == 0 ) {
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    93
			SDL_SetError("Unable to convert filename to Unicode");
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    94
			SDL_stack_free(filenameW);
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    95
			return -1;
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    96
		}
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    97
		h = CreateFile(filenameW, (w_right|r_right), (w_right)? 0 : FILE_SHARE_READ, 
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    98
					   NULL, (must_exist|truncate|a_mode), FILE_ATTRIBUTE_NORMAL,NULL);
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    99
		SDL_stack_free(filenameW);
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
   100
	}
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
   101
#else
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   102
	/* Do not open a dialog box if failure */
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
   103
	old_error_mode = SetErrorMode(SEM_NOOPENFILEERRORBOX|SEM_FAILCRITICALERRORS);
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
   104
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   105
	h = CreateFile(filename, (w_right|r_right), (w_right)? 0 : FILE_SHARE_READ, 
1453
2eb75f8a32ca Date: Mon, 27 Feb 2006 17:01:43 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1447
diff changeset
   106
		           NULL, (must_exist|truncate|a_mode), FILE_ATTRIBUTE_NORMAL,NULL);
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
   107
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   108
	/* restore old behaviour */
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   109
	SetErrorMode(old_error_mode);
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
   110
#endif /* _WIN32_WCE */
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   111
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   112
	if (h==INVALID_HANDLE_VALUE) {
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   113
		SDL_SetError("Couldn't open %s",filename);
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   114
		return -2; /* failed (CreateFile) */
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   115
	}
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   116
	context->hidden.win32io.h = h;
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   117
	context->hidden.win32io.append = a_mode;
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   118
	
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   119
	return 0; /* ok */
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   120
}
1769
290b5baf2fca Fixed bug #215
Sam Lantinga <slouken@libsdl.org>
parents: 1465
diff changeset
   121
static int SDLCALL win32_file_seek(SDL_RWops *context, int offset, int whence)
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
   122
{
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   123
	DWORD win32whence;
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   124
	int   file_pos;
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   125
	
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   126
	if (!context || context->hidden.win32io.h == INVALID_HANDLE_VALUE) {
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   127
		SDL_SetError("win32_file_seek: invalid context/file not opened");
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   128
		return -1;
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   129
	}
4026
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   130
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   131
	/* FIXME: We may be able to satisfy the seek within buffered data */
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   132
	if (whence == RW_SEEK_CUR && context->hidden.win32io.buffer.left) {
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   133
		offset -= context->hidden.win32io.buffer.left;
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   134
    }
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   135
    context->hidden.win32io.buffer.left = 0;
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   136
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   137
	switch (whence) {
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   138
		case RW_SEEK_SET:		
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   139
			win32whence = FILE_BEGIN; break;
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   140
		case RW_SEEK_CUR:
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   141
			win32whence = FILE_CURRENT; break;
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   142
		case RW_SEEK_END:
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   143
			win32whence = FILE_END; break;
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   144
		default:
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   145
			SDL_SetError("win32_file_seek: Unknown value for 'whence'");			
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   146
			return -1;
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   147
	}
4026
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   148
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   149
	file_pos = SetFilePointer(context->hidden.win32io.h,offset,NULL,win32whence);
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   150
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   151
	if ( file_pos != INVALID_SET_FILE_POINTER )
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   152
		return file_pos; /* success */
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   153
	
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   154
	SDL_Error(SDL_EFSEEK);
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   155
	return -1; /* error */
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   156
}
1769
290b5baf2fca Fixed bug #215
Sam Lantinga <slouken@libsdl.org>
parents: 1465
diff changeset
   157
static int SDLCALL win32_file_read(SDL_RWops *context, void *ptr, int size, int maxnum)
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
   158
{
4026
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   159
	int		total_need; 
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   160
	int		total_read = 0; 
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   161
    int     read_ahead;
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   162
	DWORD	byte_read;
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   163
	
4026
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   164
	total_need = size*maxnum;
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   165
	
4026
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   166
	if (!context || context->hidden.win32io.h == INVALID_HANDLE_VALUE || total_need<=0 || !size) 	
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   167
		return 0;
4026
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   168
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   169
    if (context->hidden.win32io.buffer.left > 0) {
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   170
        void *data = (char *)context->hidden.win32io.buffer.data +
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   171
                             context->hidden.win32io.buffer.size -
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   172
                             context->hidden.win32io.buffer.left;
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   173
        read_ahead = SDL_min(total_need, context->hidden.win32io.buffer.left); 
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   174
        SDL_memcpy(ptr, data, read_ahead);
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   175
        context->hidden.win32io.buffer.left -= read_ahead;
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   176
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   177
        if (read_ahead == total_need) {
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   178
            return maxnum;
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   179
        }
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   180
        ptr = (char *)ptr + read_ahead;
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   181
        total_need -= read_ahead;       
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   182
		total_read += read_ahead;
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   183
    }
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   184
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   185
    if (total_need < READAHEAD_BUFFER_SIZE) {
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   186
        if (!ReadFile(context->hidden.win32io.h,context->hidden.win32io.buffer.data,READAHEAD_BUFFER_SIZE,&byte_read,NULL)) {
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   187
            SDL_Error(SDL_EFREAD);
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   188
            return 0;
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   189
        }
4027
407ecf3ad3b3 Fixed signed/unsigned mismatch ... hmm, limited to 2 GB reads? Fix in SDL 1.3
Sam Lantinga <slouken@libsdl.org>
parents: 4026
diff changeset
   190
        read_ahead = SDL_min(total_need, (int)byte_read);
4026
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   191
        SDL_memcpy(ptr, context->hidden.win32io.buffer.data, read_ahead);
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   192
        context->hidden.win32io.buffer.size = byte_read;
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   193
        context->hidden.win32io.buffer.left = byte_read-read_ahead;
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   194
        total_read += read_ahead;
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   195
    } else {
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   196
        if (!ReadFile(context->hidden.win32io.h,ptr,total_need,&byte_read,NULL)) {
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   197
            SDL_Error(SDL_EFREAD);
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   198
            return 0;
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   199
        }
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   200
        total_read += byte_read;
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   201
    }
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   202
	return (total_read/size);
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   203
}
1769
290b5baf2fca Fixed bug #215
Sam Lantinga <slouken@libsdl.org>
parents: 1465
diff changeset
   204
static int SDLCALL win32_file_write(SDL_RWops *context, const void *ptr, int size, int num)
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
   205
{
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   206
	
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   207
	int		total_bytes; 
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   208
	DWORD	byte_written,nwritten;
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   209
	
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   210
	total_bytes = size*num;
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   211
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   212
	if (!context || context->hidden.win32io.h==INVALID_HANDLE_VALUE || total_bytes<=0 || !size) 	
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   213
		return 0;
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   214
4026
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   215
	if (context->hidden.win32io.buffer.left) {
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   216
		SetFilePointer(context->hidden.win32io.h,-context->hidden.win32io.buffer.left,NULL,FILE_CURRENT);
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   217
		context->hidden.win32io.buffer.left = 0;
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   218
	}
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   219
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   220
	/* if in append mode, we must go to the EOF before write */
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   221
	if (context->hidden.win32io.append) {
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   222
		if ( SetFilePointer(context->hidden.win32io.h,0L,NULL,FILE_END) == INVALID_SET_FILE_POINTER ) {
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   223
			SDL_Error(SDL_EFWRITE);
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   224
			return 0;
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   225
		}
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   226
	}
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   227
	
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   228
	if (!WriteFile(context->hidden.win32io.h,ptr,total_bytes,&byte_written,NULL)) {
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   229
		SDL_Error(SDL_EFWRITE);
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   230
		return 0;
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   231
	}
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   232
	
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   233
	nwritten = byte_written/size;
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   234
	return nwritten;
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   235
}
1769
290b5baf2fca Fixed bug #215
Sam Lantinga <slouken@libsdl.org>
parents: 1465
diff changeset
   236
static int SDLCALL win32_file_close(SDL_RWops *context)
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
   237
{
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   238
	
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   239
	if ( context ) {								
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   240
		if (context->hidden.win32io.h != INVALID_HANDLE_VALUE) {
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   241
			CloseHandle(context->hidden.win32io.h);
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   242
			context->hidden.win32io.h = INVALID_HANDLE_VALUE; /* to be sure */
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   243
		}
4026
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   244
		if (context->hidden.win32io.buffer.data) {
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   245
			SDL_free(context->hidden.win32io.buffer.data);
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   246
			context->hidden.win32io.buffer.data = NULL;
255b0469ca83 Added read-ahead support for Win32 file IO
Sam Lantinga <slouken@libsdl.org>
parents: 3975
diff changeset
   247
		}
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   248
		SDL_FreeRW(context);
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   249
	}
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   250
	return(0);
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   251
}
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   252
#endif /* __WIN32__ */
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   253
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   254
#ifdef HAVE_STDIO_H
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   255
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   256
/* Functions to read/write stdio file pointers */
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   257
1769
290b5baf2fca Fixed bug #215
Sam Lantinga <slouken@libsdl.org>
parents: 1465
diff changeset
   258
static int SDLCALL stdio_seek(SDL_RWops *context, int offset, int whence)
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   259
{
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   260
	if ( fseek(context->hidden.stdio.fp, offset, whence) == 0 ) {
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   261
		return(ftell(context->hidden.stdio.fp));
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   262
	} else {
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   263
		SDL_Error(SDL_EFSEEK);
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   264
		return(-1);
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   265
	}
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   266
}
1769
290b5baf2fca Fixed bug #215
Sam Lantinga <slouken@libsdl.org>
parents: 1465
diff changeset
   267
static int SDLCALL stdio_read(SDL_RWops *context, void *ptr, int size, int maxnum)
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   268
{
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   269
	size_t nread;
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   270
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   271
	nread = fread(ptr, size, maxnum, context->hidden.stdio.fp); 
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   272
	if ( nread == 0 && ferror(context->hidden.stdio.fp) ) {
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   273
		SDL_Error(SDL_EFREAD);
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   274
	}
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   275
	return(nread);
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   276
}
1769
290b5baf2fca Fixed bug #215
Sam Lantinga <slouken@libsdl.org>
parents: 1465
diff changeset
   277
static int SDLCALL stdio_write(SDL_RWops *context, const void *ptr, int size, int num)
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   278
{
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   279
	size_t nwrote;
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   280
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   281
	nwrote = fwrite(ptr, size, num, context->hidden.stdio.fp);
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   282
	if ( nwrote == 0 && ferror(context->hidden.stdio.fp) ) {
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   283
		SDL_Error(SDL_EFWRITE);
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   284
	}
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   285
	return(nwrote);
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   286
}
1769
290b5baf2fca Fixed bug #215
Sam Lantinga <slouken@libsdl.org>
parents: 1465
diff changeset
   287
static int SDLCALL stdio_close(SDL_RWops *context)
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   288
{
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   289
	if ( context ) {
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   290
		if ( context->hidden.stdio.autoclose ) {
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   291
			/* WARNING:  Check the return value here! */
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   292
			fclose(context->hidden.stdio.fp);
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   293
		}
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   294
		SDL_FreeRW(context);
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   295
	}
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   296
	return(0);
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   297
}
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   298
#endif /* !HAVE_STDIO_H */
1330
450721ad5436 It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents: 1312
diff changeset
   299
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   300
/* Functions to read/write memory pointers */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   301
1769
290b5baf2fca Fixed bug #215
Sam Lantinga <slouken@libsdl.org>
parents: 1465
diff changeset
   302
static int SDLCALL mem_seek(SDL_RWops *context, int offset, int whence)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   303
{
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   304
	Uint8 *newpos;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   305
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   306
	switch (whence) {
1330
450721ad5436 It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents: 1312
diff changeset
   307
		case RW_SEEK_SET:
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   308
			newpos = context->hidden.mem.base+offset;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   309
			break;
1330
450721ad5436 It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents: 1312
diff changeset
   310
		case RW_SEEK_CUR:
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   311
			newpos = context->hidden.mem.here+offset;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   312
			break;
1330
450721ad5436 It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents: 1312
diff changeset
   313
		case RW_SEEK_END:
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   314
			newpos = context->hidden.mem.stop+offset;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   315
			break;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   316
		default:
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   317
			SDL_SetError("Unknown value for 'whence'");
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   318
			return(-1);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   319
	}
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   320
	if ( newpos < context->hidden.mem.base ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   321
		newpos = context->hidden.mem.base;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   322
	}
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   323
	if ( newpos > context->hidden.mem.stop ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   324
		newpos = context->hidden.mem.stop;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   325
	}
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   326
	context->hidden.mem.here = newpos;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   327
	return(context->hidden.mem.here-context->hidden.mem.base);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   328
}
1769
290b5baf2fca Fixed bug #215
Sam Lantinga <slouken@libsdl.org>
parents: 1465
diff changeset
   329
static int SDLCALL mem_read(SDL_RWops *context, void *ptr, int size, int maxnum)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   330
{
1456
84de7511f79f Fixed a bunch of 64-bit compatibility problems
Sam Lantinga <slouken@libsdl.org>
parents: 1455
diff changeset
   331
	size_t total_bytes;
84de7511f79f Fixed a bunch of 64-bit compatibility problems
Sam Lantinga <slouken@libsdl.org>
parents: 1455
diff changeset
   332
	size_t mem_available;
1078
e2ef6b7001fd Patch from Antonio SJ Musumeci:
Ryan C. Gordon <icculus@icculus.org>
parents: 769
diff changeset
   333
e2ef6b7001fd Patch from Antonio SJ Musumeci:
Ryan C. Gordon <icculus@icculus.org>
parents: 769
diff changeset
   334
	total_bytes = (maxnum * size);
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
   335
	if ( (maxnum <= 0) || (size <= 0) || ((total_bytes / maxnum) != (size_t) size) ) {
1078
e2ef6b7001fd Patch from Antonio SJ Musumeci:
Ryan C. Gordon <icculus@icculus.org>
parents: 769
diff changeset
   336
		return 0;
e2ef6b7001fd Patch from Antonio SJ Musumeci:
Ryan C. Gordon <icculus@icculus.org>
parents: 769
diff changeset
   337
	}
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   338
1078
e2ef6b7001fd Patch from Antonio SJ Musumeci:
Ryan C. Gordon <icculus@icculus.org>
parents: 769
diff changeset
   339
	mem_available = (context->hidden.mem.stop - context->hidden.mem.here);
e2ef6b7001fd Patch from Antonio SJ Musumeci:
Ryan C. Gordon <icculus@icculus.org>
parents: 769
diff changeset
   340
	if (total_bytes > mem_available) {
e2ef6b7001fd Patch from Antonio SJ Musumeci:
Ryan C. Gordon <icculus@icculus.org>
parents: 769
diff changeset
   341
		total_bytes = mem_available;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   342
	}
1078
e2ef6b7001fd Patch from Antonio SJ Musumeci:
Ryan C. Gordon <icculus@icculus.org>
parents: 769
diff changeset
   343
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
   344
	SDL_memcpy(ptr, context->hidden.mem.here, total_bytes);
1078
e2ef6b7001fd Patch from Antonio SJ Musumeci:
Ryan C. Gordon <icculus@icculus.org>
parents: 769
diff changeset
   345
	context->hidden.mem.here += total_bytes;
e2ef6b7001fd Patch from Antonio SJ Musumeci:
Ryan C. Gordon <icculus@icculus.org>
parents: 769
diff changeset
   346
e2ef6b7001fd Patch from Antonio SJ Musumeci:
Ryan C. Gordon <icculus@icculus.org>
parents: 769
diff changeset
   347
	return (total_bytes / size);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   348
}
1769
290b5baf2fca Fixed bug #215
Sam Lantinga <slouken@libsdl.org>
parents: 1465
diff changeset
   349
static int SDLCALL mem_write(SDL_RWops *context, const void *ptr, int size, int num)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   350
{
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   351
	if ( (context->hidden.mem.here + (num*size)) > context->hidden.mem.stop ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   352
		num = (context->hidden.mem.stop-context->hidden.mem.here)/size;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   353
	}
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
   354
	SDL_memcpy(context->hidden.mem.here, ptr, num*size);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   355
	context->hidden.mem.here += num*size;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   356
	return(num);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   357
}
1769
290b5baf2fca Fixed bug #215
Sam Lantinga <slouken@libsdl.org>
parents: 1465
diff changeset
   358
static int SDLCALL mem_writeconst(SDL_RWops *context, const void *ptr, int size, int num)
764
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   359
{
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   360
	SDL_SetError("Can't write to read-only memory");
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   361
	return(-1);
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   362
}
1769
290b5baf2fca Fixed bug #215
Sam Lantinga <slouken@libsdl.org>
parents: 1465
diff changeset
   363
static int SDLCALL mem_close(SDL_RWops *context)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   364
{
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   365
	if ( context ) {
1202
0748fbb272e7 Matched SDL_AllowRW and SDL_FreeRW calls in SDL_rwops.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 1078
diff changeset
   366
		SDL_FreeRW(context);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   367
	}
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   368
	return(0);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   369
}
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   370
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   371
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   372
/* Functions to create SDL_RWops structures from various data sources */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   373
1402
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1358
diff changeset
   374
#ifdef __MACOS__
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   375
/*
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   376
 * translate unix-style slash-separated filename to mac-style colon-separated
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   377
 * name; return malloced string
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   378
 */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   379
static char *unix_to_mac(const char *file)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   380
{
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
   381
	int flen = SDL_strlen(file);
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
   382
	char *path = SDL_malloc(flen + 2);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   383
	const char *src = file;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   384
	char *dst = path;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   385
	if(*src == '/') {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   386
		/* really depends on filesystem layout, hope for the best */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   387
		src++;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   388
	} else {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   389
		/* Check if this is a MacOS path to begin with */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   390
		if(*src != ':')
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   391
			*dst++ = ':';   /* relative paths begin with ':' */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   392
	}
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   393
	while(src < file + flen) {
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
   394
		const char *end = SDL_strchr(src, '/');
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   395
		int len;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   396
		if(!end)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   397
			end = file + flen; /* last component */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   398
		len = end - src;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   399
		if(len == 0 || (len == 1 && src[0] == '.')) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   400
			/* remove repeated slashes and . */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   401
		} else {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   402
			if(len == 2 && src[0] == '.' && src[1] == '.') {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   403
				/* replace .. with the empty string */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   404
			} else {
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
   405
				SDL_memcpy(dst, src, len);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   406
				dst += len;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   407
			}
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   408
			if(end < file + flen)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   409
				*dst++ = ':';
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   410
		}
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   411
		src = end + 1;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   412
	}
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   413
	*dst++ = '\0';
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   414
	return path;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   415
}
1402
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1358
diff changeset
   416
#endif /* __MACOS__ */
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   417
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   418
SDL_RWops *SDL_RWFromFile(const char *file, const char *mode)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   419
{
1330
450721ad5436 It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents: 1312
diff changeset
   420
	SDL_RWops *rwops = NULL;
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
   421
#ifdef HAVE_STDIO_H
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
   422
	FILE *fp = NULL;
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
   423
#endif
1455
f487bb150acc Hah, standard stdio code crashed on the test case.
Sam Lantinga <slouken@libsdl.org>
parents: 1453
diff changeset
   424
	if ( !file || !*file || !mode || !*mode ) {
f487bb150acc Hah, standard stdio code crashed on the test case.
Sam Lantinga <slouken@libsdl.org>
parents: 1453
diff changeset
   425
		SDL_SetError("SDL_RWFromFile(): No file or no mode specified");
f487bb150acc Hah, standard stdio code crashed on the test case.
Sam Lantinga <slouken@libsdl.org>
parents: 1453
diff changeset
   426
		return NULL;
f487bb150acc Hah, standard stdio code crashed on the test case.
Sam Lantinga <slouken@libsdl.org>
parents: 1453
diff changeset
   427
	}
f487bb150acc Hah, standard stdio code crashed on the test case.
Sam Lantinga <slouken@libsdl.org>
parents: 1453
diff changeset
   428
3975
e85e65aec22f Added S60 port.
Ryan C. Gordon <icculus@icculus.org>
parents: 1769
diff changeset
   429
#if defined(__WIN32__) && !defined(__SYMBIAN32__)
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   430
	rwops = SDL_AllocRW();
1453
2eb75f8a32ca Date: Mon, 27 Feb 2006 17:01:43 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1447
diff changeset
   431
	if (!rwops)
2eb75f8a32ca Date: Mon, 27 Feb 2006 17:01:43 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1447
diff changeset
   432
		return NULL; /* SDL_SetError already setup by SDL_AllocRW() */
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   433
	rwops->hidden.win32io.h = INVALID_HANDLE_VALUE;
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   434
	if (win32_file_open(rwops,file,mode)) {
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   435
		SDL_FreeRW(rwops);
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   436
		return NULL;
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   437
	}	
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   438
	rwops->seek  = win32_file_seek;
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   439
	rwops->read  = win32_file_read;
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   440
	rwops->write = win32_file_write;
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   441
	rwops->close = win32_file_close;
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   442
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   443
#elif HAVE_STDIO_H
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   444
1402
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1358
diff changeset
   445
#ifdef __MACOS__
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   446
	{
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   447
		char *mpath = unix_to_mac(file);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   448
		fp = fopen(mpath, mode);
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
   449
		SDL_free(mpath);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   450
	}
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   451
#else
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   452
	fp = fopen(file, mode);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   453
#endif
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   454
	if ( fp == NULL ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   455
		SDL_SetError("Couldn't open %s", file);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   456
	} else {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   457
		rwops = SDL_RWFromFP(fp, 1);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   458
	}
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   459
#else
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   460
	SDL_SetError("SDL not compiled with stdio support");
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   461
#endif /* !HAVE_STDIO_H */
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   462
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   463
	return(rwops);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   464
}
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   465
1330
450721ad5436 It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents: 1312
diff changeset
   466
#ifdef HAVE_STDIO_H
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   467
SDL_RWops *SDL_RWFromFP(FILE *fp, int autoclose)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   468
{
1330
450721ad5436 It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents: 1312
diff changeset
   469
	SDL_RWops *rwops = NULL;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   470
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   471
	rwops = SDL_AllocRW();
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   472
	if ( rwops != NULL ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   473
		rwops->seek = stdio_seek;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   474
		rwops->read = stdio_read;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   475
		rwops->write = stdio_write;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   476
		rwops->close = stdio_close;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   477
		rwops->hidden.stdio.fp = fp;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   478
		rwops->hidden.stdio.autoclose = autoclose;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   479
	}
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   480
	return(rwops);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   481
}
1330
450721ad5436 It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents: 1312
diff changeset
   482
#endif /* HAVE_STDIO_H */
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   483
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   484
SDL_RWops *SDL_RWFromMem(void *mem, int size)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   485
{
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   486
	SDL_RWops *rwops;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   487
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   488
	rwops = SDL_AllocRW();
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   489
	if ( rwops != NULL ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   490
		rwops->seek = mem_seek;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   491
		rwops->read = mem_read;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   492
		rwops->write = mem_write;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   493
		rwops->close = mem_close;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   494
		rwops->hidden.mem.base = (Uint8 *)mem;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   495
		rwops->hidden.mem.here = rwops->hidden.mem.base;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   496
		rwops->hidden.mem.stop = rwops->hidden.mem.base+size;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   497
	}
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   498
	return(rwops);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   499
}
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   500
764
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   501
SDL_RWops *SDL_RWFromConstMem(const void *mem, int size)
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   502
{
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   503
	SDL_RWops *rwops;
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   504
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   505
	rwops = SDL_AllocRW();
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   506
	if ( rwops != NULL ) {
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   507
		rwops->seek = mem_seek;
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   508
		rwops->read = mem_read;
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   509
		rwops->write = mem_writeconst;
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   510
		rwops->close = mem_close;
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   511
		rwops->hidden.mem.base = (Uint8 *)mem;
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   512
		rwops->hidden.mem.here = rwops->hidden.mem.base;
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   513
		rwops->hidden.mem.stop = rwops->hidden.mem.base+size;
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   514
	}
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   515
	return(rwops);
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   516
}
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   517
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   518
SDL_RWops *SDL_AllocRW(void)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   519
{
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   520
	SDL_RWops *area;
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   521
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
   522
	area = (SDL_RWops *)SDL_malloc(sizeof *area);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   523
	if ( area == NULL ) {
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   524
		SDL_OutOfMemory();
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   525
	}
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   526
	return(area);
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   527
}
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   528
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   529
void SDL_FreeRW(SDL_RWops *area)
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   530
{
1336
3692456e7b0f Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
   531
	SDL_free(area);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   532
}
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   533
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   534
/* Functions for dynamically reading and writing endian-specific values */
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   535
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   536
Uint16 SDL_ReadLE16 (SDL_RWops *src)
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   537
{
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   538
	Uint16 value;
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   539
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   540
	SDL_RWread(src, &value, (sizeof value), 1);
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   541
	return(SDL_SwapLE16(value));
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   542
}
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   543
Uint16 SDL_ReadBE16 (SDL_RWops *src)
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   544
{
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   545
	Uint16 value;
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   546
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   547
	SDL_RWread(src, &value, (sizeof value), 1);
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   548
	return(SDL_SwapBE16(value));
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   549
}
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   550
Uint32 SDL_ReadLE32 (SDL_RWops *src)
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   551
{
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   552
	Uint32 value;
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   553
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   554
	SDL_RWread(src, &value, (sizeof value), 1);
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   555
	return(SDL_SwapLE32(value));
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   556
}
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   557
Uint32 SDL_ReadBE32 (SDL_RWops *src)
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   558
{
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   559
	Uint32 value;
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   560
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   561
	SDL_RWread(src, &value, (sizeof value), 1);
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   562
	return(SDL_SwapBE32(value));
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   563
}
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   564
Uint64 SDL_ReadLE64 (SDL_RWops *src)
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   565
{
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   566
	Uint64 value;
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   567
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   568
	SDL_RWread(src, &value, (sizeof value), 1);
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   569
	return(SDL_SwapLE64(value));
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   570
}
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   571
Uint64 SDL_ReadBE64 (SDL_RWops *src)
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   572
{
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   573
	Uint64 value;
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   574
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   575
	SDL_RWread(src, &value, (sizeof value), 1);
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   576
	return(SDL_SwapBE64(value));
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   577
}
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   578
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   579
int SDL_WriteLE16 (SDL_RWops *dst, Uint16 value)
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   580
{
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   581
	value = SDL_SwapLE16(value);
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   582
	return(SDL_RWwrite(dst, &value, (sizeof value), 1));
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   583
}
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   584
int SDL_WriteBE16 (SDL_RWops *dst, Uint16 value)
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   585
{
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   586
	value = SDL_SwapBE16(value);
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   587
	return(SDL_RWwrite(dst, &value, (sizeof value), 1));
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   588
}
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   589
int SDL_WriteLE32 (SDL_RWops *dst, Uint32 value)
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   590
{
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   591
	value = SDL_SwapLE32(value);
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   592
	return(SDL_RWwrite(dst, &value, (sizeof value), 1));
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   593
}
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   594
int SDL_WriteBE32 (SDL_RWops *dst, Uint32 value)
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   595
{
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   596
	value = SDL_SwapBE32(value);
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   597
	return(SDL_RWwrite(dst, &value, (sizeof value), 1));
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   598
}
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   599
int SDL_WriteLE64 (SDL_RWops *dst, Uint64 value)
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   600
{
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   601
	value = SDL_SwapLE64(value);
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   602
	return(SDL_RWwrite(dst, &value, (sizeof value), 1));
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   603
}
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   604
int SDL_WriteBE64 (SDL_RWops *dst, Uint64 value)
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   605
{
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   606
	value = SDL_SwapBE64(value);
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   607
	return(SDL_RWwrite(dst, &value, (sizeof value), 1));
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   608
}