src/file/SDL_rwops.c
author Philipp Wiesemann <philipp.wiesemann@arcor.de>
Sun, 02 Jun 2013 14:13:21 +0200
changeset 7262 3c5f6170df8e
parent 7191 75360622e65f
child 7719 31b5f9ff36ca
child 8477 ad08f0d710f3
permissions -rw-r--r--
Fixed implicit function declaration for SDL_AndroidGetInternalStoragePath().
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
     1
/*
5535
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
     2
  Simple DirectMedia Layer
6885
700f1b25f77f Happy New Year!
Sam Lantinga <slouken@libsdl.org>
parents: 6655
diff changeset
     3
  Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
     4
5535
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
     5
  This software is provided 'as-is', without any express or implied
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
     6
  warranty.  In no event will the authors be held liable for any damages
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
     7
  arising from the use of this software.
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
     8
5535
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
     9
  Permission is granted to anyone to use this software for any purpose,
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
    10
  including commercial applications, and to alter it and redistribute it
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
    11
  freely, subject to the following restrictions:
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    12
5535
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
    13
  1. The origin of this software must not be misrepresented; you must not
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
    14
     claim that you wrote the original software. If you use this software
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
    15
     in a product, an acknowledgment in the product documentation would be
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
    16
     appreciated but is not required.
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
    17
  2. Altered source versions must be plainly marked as such, and must not be
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
    18
     misrepresented as being the original software.
96594ac5fd1a SDL 1.3 is now under the zlib license.
Sam Lantinga <slouken@libsdl.org>
parents: 5262
diff changeset
    19
  3. This notice may not be removed or altered from any source distribution.
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    20
*/
6643
673aed697ce6 Fixed compiling fseek64o on Linux systems
Sam Lantinga <slouken@libsdl.org>
parents: 6642
diff changeset
    21
/* Need this so Linux systems define fseek64o, ftell64o and off64_t */
673aed697ce6 Fixed compiling fseek64o on Linux systems
Sam Lantinga <slouken@libsdl.org>
parents: 6642
diff changeset
    22
#define _LARGEFILE64_SOURCE
1402
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1358
diff changeset
    23
#include "SDL_config.h"
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    24
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    25
/* This file provides a general interface for SDL to read and write
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    26
   data sources.  It can easily be extended to files, memory, etc.
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    27
*/
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    28
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
    29
#include "SDL_endian.h"
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    30
#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
    31
4447
947201caa46e Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents: 3697
diff changeset
    32
#ifdef __APPLE__
4454
be387681d876 Fixed Eric's changes to allow building from the command line.
Sam Lantinga <slouken@libsdl.org>
parents: 4447
diff changeset
    33
#include "cocoa/SDL_rwopsbundlesupport.h"
4447
947201caa46e Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents: 3697
diff changeset
    34
#endif /* __APPLE__ */
947201caa46e Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
Eric Wing <ewing . public |-at-| gmail . com>
parents: 3697
diff changeset
    35
5582
1281a3f1f0a6 Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents: 5535
diff changeset
    36
#ifdef ANDROID
1281a3f1f0a6 Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents: 5535
diff changeset
    37
#include "../core/android/SDL_android.h"
7262
3c5f6170df8e Fixed implicit function declaration for SDL_AndroidGetInternalStoragePath().
Philipp Wiesemann <philipp.wiesemann@arcor.de>
parents: 7191
diff changeset
    38
#include "SDL_system.h"
5582
1281a3f1f0a6 Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents: 5535
diff changeset
    39
#endif
1281a3f1f0a6 Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents: 5535
diff changeset
    40
5086
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5062
diff changeset
    41
#ifdef __WIN32__
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    42
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
    43
/* Functions to read/write Win32 API file pointers */
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
    44
5090
327f181542f1 Include windows.h in a single point in the source, so we can be consistent about the definition of UNICODE and have core utility functions for Windows that all modules can share.
Sam Lantinga <slouken@libsdl.org>
parents: 5086
diff changeset
    45
#include "../core/windows/SDL_windows.h"
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    46
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    47
#ifndef INVALID_SET_FILE_POINTER
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    48
#define INVALID_SET_FILE_POINTER 0xFFFFFFFF
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    49
#endif
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    50
7191
75360622e65f File style cleanup for the SDL 2.0 release
Sam Lantinga <slouken@libsdl.org>
parents: 7070
diff changeset
    51
#define READAHEAD_BUFFER_SIZE   1024
2159
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
    52
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    53
static int SDLCALL
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
    54
windows_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
    55
{
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    56
    UINT old_error_mode;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    57
    HANDLE h;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    58
    DWORD r_right, w_right;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    59
    DWORD must_exist, truncate;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    60
    int a_mode;
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    61
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    62
    if (!context)
2164
d083a2e4433d Merged memory leak fix from SDL 1.2
Sam Lantinga <slouken@libsdl.org>
parents: 2161
diff changeset
    63
        return -1;              /* failed (invalid call) */
2159
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
    64
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
    65
    context->hidden.windowsio.h = INVALID_HANDLE_VALUE;   /* mark this as unusable */
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
    66
    context->hidden.windowsio.buffer.data = NULL;
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
    67
    context->hidden.windowsio.buffer.size = 0;
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
    68
    context->hidden.windowsio.buffer.left = 0;
2165
c2ffcc627701 Merged r3201:3204 from branches/SDL-1.2: win32 rwops tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents: 2164
diff changeset
    69
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    70
    /* "r" = reading, file must exist */
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    71
    /* "w" = writing, truncate existing, file may not exist */
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    72
    /* "r+"= reading or writing, file must exist            */
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    73
    /* "a" = writing, append file may not exist             */
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    74
    /* "a+"= append + read, file may not exist              */
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    75
    /* "w+" = read, write, truncate. file may not exist    */
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
    76
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    77
    must_exist = (SDL_strchr(mode, 'r') != NULL) ? OPEN_EXISTING : 0;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    78
    truncate = (SDL_strchr(mode, 'w') != NULL) ? CREATE_ALWAYS : 0;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    79
    r_right = (SDL_strchr(mode, '+') != NULL
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    80
               || must_exist) ? GENERIC_READ : 0;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    81
    a_mode = (SDL_strchr(mode, 'a') != NULL) ? OPEN_ALWAYS : 0;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    82
    w_right = (a_mode || SDL_strchr(mode, '+')
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    83
               || truncate) ? GENERIC_WRITE : 0;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    84
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    85
    if (!r_right && !w_right)   /* inconsistent mode */
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    86
        return -1;              /* failed (invalid call) */
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    87
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
    88
    context->hidden.windowsio.buffer.data =
2173
Sam Lantinga <slouken@libsdl.org>
parents: 2165
diff changeset
    89
        (char *) SDL_malloc(READAHEAD_BUFFER_SIZE);
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
    90
    if (!context->hidden.windowsio.buffer.data) {
7037
3fedf1f25b94 Make SDL_SetError and friends unconditionally return -1.
Ryan C. Gordon <icculus@icculus.org>
parents: 7011
diff changeset
    91
        return SDL_OutOfMemory();
2165
c2ffcc627701 Merged r3201:3204 from branches/SDL-1.2: win32 rwops tweaks.
Ryan C. Gordon <icculus@icculus.org>
parents: 2164
diff changeset
    92
    }
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    93
    /* Do not open a dialog box if failure */
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    94
    old_error_mode =
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
    95
        SetErrorMode(SEM_NOOPENFILEERRORBOX | SEM_FAILCRITICALERRORS);
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
    96
5090
327f181542f1 Include windows.h in a single point in the source, so we can be consistent about the definition of UNICODE and have core utility functions for Windows that all modules can share.
Sam Lantinga <slouken@libsdl.org>
parents: 5086
diff changeset
    97
    {
327f181542f1 Include windows.h in a single point in the source, so we can be consistent about the definition of UNICODE and have core utility functions for Windows that all modules can share.
Sam Lantinga <slouken@libsdl.org>
parents: 5086
diff changeset
    98
        LPTSTR tstr = WIN_UTF8ToString(filename);
327f181542f1 Include windows.h in a single point in the source, so we can be consistent about the definition of UNICODE and have core utility functions for Windows that all modules can share.
Sam Lantinga <slouken@libsdl.org>
parents: 5086
diff changeset
    99
        h = CreateFile(tstr, (w_right | r_right),
327f181542f1 Include windows.h in a single point in the source, so we can be consistent about the definition of UNICODE and have core utility functions for Windows that all modules can share.
Sam Lantinga <slouken@libsdl.org>
parents: 5086
diff changeset
   100
                       (w_right) ? 0 : FILE_SHARE_READ, NULL,
327f181542f1 Include windows.h in a single point in the source, so we can be consistent about the definition of UNICODE and have core utility functions for Windows that all modules can share.
Sam Lantinga <slouken@libsdl.org>
parents: 5086
diff changeset
   101
                       (must_exist | truncate | a_mode),
327f181542f1 Include windows.h in a single point in the source, so we can be consistent about the definition of UNICODE and have core utility functions for Windows that all modules can share.
Sam Lantinga <slouken@libsdl.org>
parents: 5086
diff changeset
   102
                       FILE_ATTRIBUTE_NORMAL, NULL);
327f181542f1 Include windows.h in a single point in the source, so we can be consistent about the definition of UNICODE and have core utility functions for Windows that all modules can share.
Sam Lantinga <slouken@libsdl.org>
parents: 5086
diff changeset
   103
        SDL_free(tstr);
327f181542f1 Include windows.h in a single point in the source, so we can be consistent about the definition of UNICODE and have core utility functions for Windows that all modules can share.
Sam Lantinga <slouken@libsdl.org>
parents: 5086
diff changeset
   104
    }
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
   105
5090
327f181542f1 Include windows.h in a single point in the source, so we can be consistent about the definition of UNICODE and have core utility functions for Windows that all modules can share.
Sam Lantinga <slouken@libsdl.org>
parents: 5086
diff changeset
   106
    /* restore old behavior */
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   107
    SetErrorMode(old_error_mode);
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   108
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   109
    if (h == INVALID_HANDLE_VALUE) {
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   110
        SDL_free(context->hidden.windowsio.buffer.data);
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   111
        context->hidden.windowsio.buffer.data = NULL;
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   112
        SDL_SetError("Couldn't open %s", filename);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   113
        return -2;              /* failed (CreateFile) */
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   114
    }
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   115
    context->hidden.windowsio.h = h;
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   116
    context->hidden.windowsio.append = a_mode ? SDL_TRUE : SDL_FALSE;
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   117
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   118
    return 0;                   /* ok */
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   119
}
2735
204be4fc2726 Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents: 2185
diff changeset
   120
6642
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   121
static Sint64 SDLCALL
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   122
windows_file_size(SDL_RWops * context)
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   123
{
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   124
    LARGE_INTEGER size;
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   125
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   126
    if (!context || context->hidden.windowsio.h == INVALID_HANDLE_VALUE) {
7037
3fedf1f25b94 Make SDL_SetError and friends unconditionally return -1.
Ryan C. Gordon <icculus@icculus.org>
parents: 7011
diff changeset
   127
        return SDL_SetError("windows_file_size: invalid context/file not opened");
6642
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   128
    }
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   129
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   130
    if (!GetFileSizeEx(context->hidden.windowsio.h, &size)) {
7037
3fedf1f25b94 Make SDL_SetError and friends unconditionally return -1.
Ryan C. Gordon <icculus@icculus.org>
parents: 7011
diff changeset
   131
        return WIN_SetError("windows_file_size");
6642
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   132
    }
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   133
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   134
    return size.QuadPart;
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   135
}
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   136
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   137
static Sint64 SDLCALL
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   138
windows_file_seek(SDL_RWops * context, Sint64 offset, int whence)
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
   139
{
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   140
    DWORD windowswhence;
6642
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   141
    LARGE_INTEGER windowsoffset;
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   142
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   143
    if (!context || context->hidden.windowsio.h == INVALID_HANDLE_VALUE) {
7037
3fedf1f25b94 Make SDL_SetError and friends unconditionally return -1.
Ryan C. Gordon <icculus@icculus.org>
parents: 7011
diff changeset
   144
        return SDL_SetError("windows_file_seek: invalid context/file not opened");
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   145
    }
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   146
2159
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   147
    /* FIXME: We may be able to satisfy the seek within buffered data */
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   148
    if (whence == RW_SEEK_CUR && context->hidden.windowsio.buffer.left) {
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   149
        offset -= (long)context->hidden.windowsio.buffer.left;
2159
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   150
    }
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   151
    context->hidden.windowsio.buffer.left = 0;
2159
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   152
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   153
    switch (whence) {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   154
    case RW_SEEK_SET:
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   155
        windowswhence = FILE_BEGIN;
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   156
        break;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   157
    case RW_SEEK_CUR:
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   158
        windowswhence = FILE_CURRENT;
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   159
        break;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   160
    case RW_SEEK_END:
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   161
        windowswhence = FILE_END;
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   162
        break;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   163
    default:
7037
3fedf1f25b94 Make SDL_SetError and friends unconditionally return -1.
Ryan C. Gordon <icculus@icculus.org>
parents: 7011
diff changeset
   164
        return SDL_SetError("windows_file_seek: Unknown value for 'whence'");
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   165
    }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   166
6642
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   167
    windowsoffset.QuadPart = offset;
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   168
    if (!SetFilePointerEx(context->hidden.windowsio.h, windowsoffset, &windowsoffset, windowswhence)) {
7037
3fedf1f25b94 Make SDL_SetError and friends unconditionally return -1.
Ryan C. Gordon <icculus@icculus.org>
parents: 7011
diff changeset
   169
        return WIN_SetError("windows_file_seek");
6642
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   170
    }
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   171
    return windowsoffset.QuadPart;
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   172
}
2735
204be4fc2726 Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents: 2185
diff changeset
   173
2160
00adbaed3910 Updated to use size_t instead of int for amounts of data.
Sam Lantinga <slouken@libsdl.org>
parents: 2159
diff changeset
   174
static size_t SDLCALL
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   175
windows_file_read(SDL_RWops * context, void *ptr, size_t size, size_t maxnum)
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
   176
{
2160
00adbaed3910 Updated to use size_t instead of int for amounts of data.
Sam Lantinga <slouken@libsdl.org>
parents: 2159
diff changeset
   177
    size_t total_need;
00adbaed3910 Updated to use size_t instead of int for amounts of data.
Sam Lantinga <slouken@libsdl.org>
parents: 2159
diff changeset
   178
    size_t total_read = 0;
00adbaed3910 Updated to use size_t instead of int for amounts of data.
Sam Lantinga <slouken@libsdl.org>
parents: 2159
diff changeset
   179
    size_t read_ahead;
2159
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   180
    DWORD byte_read;
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   181
2159
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   182
    total_need = size * maxnum;
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   183
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   184
    if (!context || context->hidden.windowsio.h == INVALID_HANDLE_VALUE
2160
00adbaed3910 Updated to use size_t instead of int for amounts of data.
Sam Lantinga <slouken@libsdl.org>
parents: 2159
diff changeset
   185
        || !total_need)
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   186
        return 0;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   187
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   188
    if (context->hidden.windowsio.buffer.left > 0) {
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   189
        void *data = (char *) context->hidden.windowsio.buffer.data +
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   190
            context->hidden.windowsio.buffer.size -
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   191
            context->hidden.windowsio.buffer.left;
2185
2032348afed1 This code adds support for DirectColor visuals to SDL 1.3. The support uses part of the Xmu library. To ensure that the library is
Bob Pendleton <bob@pendleton.com>
parents: 2179
diff changeset
   192
        read_ahead =
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   193
            SDL_min(total_need, context->hidden.windowsio.buffer.left);
2159
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   194
        SDL_memcpy(ptr, data, read_ahead);
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   195
        context->hidden.windowsio.buffer.left -= read_ahead;
2159
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   196
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   197
        if (read_ahead == total_need) {
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   198
            return maxnum;
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   199
        }
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   200
        ptr = (char *) ptr + read_ahead;
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   201
        total_need -= read_ahead;
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   202
        total_read += read_ahead;
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   203
    }
2159
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   204
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   205
    if (total_need < READAHEAD_BUFFER_SIZE) {
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   206
        if (!ReadFile
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   207
            (context->hidden.windowsio.h, context->hidden.windowsio.buffer.data,
2159
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   208
             READAHEAD_BUFFER_SIZE, &byte_read, NULL)) {
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   209
            SDL_Error(SDL_EFREAD);
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   210
            return 0;
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   211
        }
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   212
        read_ahead = SDL_min(total_need, (int) byte_read);
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   213
        SDL_memcpy(ptr, context->hidden.windowsio.buffer.data, read_ahead);
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   214
        context->hidden.windowsio.buffer.size = byte_read;
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   215
        context->hidden.windowsio.buffer.left = byte_read - read_ahead;
2159
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   216
        total_read += read_ahead;
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   217
    } else {
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   218
        if (!ReadFile
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   219
            (context->hidden.windowsio.h, ptr, (DWORD)total_need, &byte_read, NULL)) {
2159
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   220
            SDL_Error(SDL_EFREAD);
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   221
            return 0;
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   222
        }
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   223
        total_read += byte_read;
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   224
    }
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   225
    return (total_read / size);
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   226
}
2735
204be4fc2726 Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents: 2185
diff changeset
   227
2160
00adbaed3910 Updated to use size_t instead of int for amounts of data.
Sam Lantinga <slouken@libsdl.org>
parents: 2159
diff changeset
   228
static size_t SDLCALL
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   229
windows_file_write(SDL_RWops * context, const void *ptr, size_t size,
2160
00adbaed3910 Updated to use size_t instead of int for amounts of data.
Sam Lantinga <slouken@libsdl.org>
parents: 2159
diff changeset
   230
                 size_t num)
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
   231
{
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   232
2160
00adbaed3910 Updated to use size_t instead of int for amounts of data.
Sam Lantinga <slouken@libsdl.org>
parents: 2159
diff changeset
   233
    size_t total_bytes;
3253
5d7ef5970073 Fixed issues building 64-bit Windows binary
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
   234
    DWORD byte_written;
5d7ef5970073 Fixed issues building 64-bit Windows binary
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
   235
    size_t nwritten;
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   236
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   237
    total_bytes = size * num;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   238
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   239
    if (!context || context->hidden.windowsio.h == INVALID_HANDLE_VALUE
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   240
        || total_bytes <= 0 || !size)
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   241
        return 0;
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   242
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   243
    if (context->hidden.windowsio.buffer.left) {
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   244
        SetFilePointer(context->hidden.windowsio.h,
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   245
                       -(LONG)context->hidden.windowsio.buffer.left, NULL,
2159
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   246
                       FILE_CURRENT);
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   247
        context->hidden.windowsio.buffer.left = 0;
2159
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   248
    }
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   249
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   250
    /* if in append mode, we must go to the EOF before write */
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   251
    if (context->hidden.windowsio.append) {
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   252
        if (SetFilePointer(context->hidden.windowsio.h, 0L, NULL, FILE_END) ==
2159
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   253
            INVALID_SET_FILE_POINTER) {
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   254
            SDL_Error(SDL_EFWRITE);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   255
            return 0;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   256
        }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   257
    }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   258
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   259
    if (!WriteFile
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   260
        (context->hidden.windowsio.h, ptr, (DWORD)total_bytes, &byte_written, NULL)) {
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   261
        SDL_Error(SDL_EFWRITE);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   262
        return 0;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   263
    }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   264
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   265
    nwritten = byte_written / size;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   266
    return nwritten;
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   267
}
2735
204be4fc2726 Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents: 2185
diff changeset
   268
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   269
static int SDLCALL
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   270
windows_file_close(SDL_RWops * context)
1465
8dfa9a6d69a5 Updated WinCE support by Dmitry (with some tweaks)
Sam Lantinga <slouken@libsdl.org>
parents: 1456
diff changeset
   271
{
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   272
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   273
    if (context) {
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   274
        if (context->hidden.windowsio.h != INVALID_HANDLE_VALUE) {
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   275
            CloseHandle(context->hidden.windowsio.h);
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   276
            context->hidden.windowsio.h = INVALID_HANDLE_VALUE;   /* to be sure */
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   277
        }
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   278
        if (context->hidden.windowsio.buffer.data) {
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   279
            SDL_free(context->hidden.windowsio.buffer.data);
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   280
            context->hidden.windowsio.buffer.data = NULL;
2159
dd4753e47ed4 Merged read-ahead support for Win32 file I/O from SDL 1.2 revision 3183
Sam Lantinga <slouken@libsdl.org>
parents: 1978
diff changeset
   281
        }
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   282
        SDL_FreeRW(context);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   283
    }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   284
    return (0);
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   285
}
5086
c2539ff054c8 Fixed compiling on Windows Mobile SDK 5.0 with Visual Studio 2008
Sam Lantinga <slouken@libsdl.org>
parents: 5062
diff changeset
   286
#endif /* __WIN32__ */
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   287
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   288
#ifdef HAVE_STDIO_H
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   289
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   290
/* 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
   291
6642
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   292
static Sint64 SDLCALL
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   293
stdio_size(SDL_RWops * context)
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   294
{
6642
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   295
    Sint64 pos, size;
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   296
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   297
    pos = SDL_RWseek(context, 0, RW_SEEK_CUR);
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   298
    if (pos < 0) {
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   299
        return -1;
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   300
    }
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   301
    size = SDL_RWseek(context, 0, RW_SEEK_END);
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   302
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   303
    SDL_RWseek(context, pos, RW_SEEK_SET);
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   304
    return size;
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   305
}
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   306
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   307
static Sint64 SDLCALL
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   308
stdio_seek(SDL_RWops * context, Sint64 offset, int whence)
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   309
{
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   310
#ifdef HAVE_FSEEKO64
6644
eacc8b228cef Fixed symbol typo.
Ryan C. Gordon <icculus@icculus.org>
parents: 6643
diff changeset
   311
    if (fseeko64(context->hidden.stdio.fp, (off64_t)offset, whence) == 0) {
eacc8b228cef Fixed symbol typo.
Ryan C. Gordon <icculus@icculus.org>
parents: 6643
diff changeset
   312
        return ftello64(context->hidden.stdio.fp);
6642
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   313
    }
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   314
#elif defined(HAVE_FSEEKO)
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   315
    if (fseeko(context->hidden.stdio.fp, (off_t)offset, whence) == 0) {
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   316
        return ftello(context->hidden.stdio.fp);
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   317
    }
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   318
#else
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   319
    if (fseek(context->hidden.stdio.fp, offset, whence) == 0) {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   320
        return (ftell(context->hidden.stdio.fp));
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   321
    }
6642
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   322
#endif
7037
3fedf1f25b94 Make SDL_SetError and friends unconditionally return -1.
Ryan C. Gordon <icculus@icculus.org>
parents: 7011
diff changeset
   323
    return SDL_Error(SDL_EFSEEK);
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   324
}
2735
204be4fc2726 Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents: 2185
diff changeset
   325
2160
00adbaed3910 Updated to use size_t instead of int for amounts of data.
Sam Lantinga <slouken@libsdl.org>
parents: 2159
diff changeset
   326
static size_t SDLCALL
00adbaed3910 Updated to use size_t instead of int for amounts of data.
Sam Lantinga <slouken@libsdl.org>
parents: 2159
diff changeset
   327
stdio_read(SDL_RWops * context, void *ptr, size_t size, size_t maxnum)
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   328
{
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   329
    size_t nread;
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   330
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   331
    nread = fread(ptr, size, maxnum, context->hidden.stdio.fp);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   332
    if (nread == 0 && ferror(context->hidden.stdio.fp)) {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   333
        SDL_Error(SDL_EFREAD);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   334
    }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   335
    return (nread);
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   336
}
2735
204be4fc2726 Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents: 2185
diff changeset
   337
2160
00adbaed3910 Updated to use size_t instead of int for amounts of data.
Sam Lantinga <slouken@libsdl.org>
parents: 2159
diff changeset
   338
static size_t SDLCALL
00adbaed3910 Updated to use size_t instead of int for amounts of data.
Sam Lantinga <slouken@libsdl.org>
parents: 2159
diff changeset
   339
stdio_write(SDL_RWops * context, const void *ptr, size_t size, size_t num)
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   340
{
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   341
    size_t nwrote;
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   342
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   343
    nwrote = fwrite(ptr, size, num, context->hidden.stdio.fp);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   344
    if (nwrote == 0 && ferror(context->hidden.stdio.fp)) {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   345
        SDL_Error(SDL_EFWRITE);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   346
    }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   347
    return (nwrote);
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   348
}
2735
204be4fc2726 Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents: 2185
diff changeset
   349
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   350
static int SDLCALL
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   351
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
   352
{
2160
00adbaed3910 Updated to use size_t instead of int for amounts of data.
Sam Lantinga <slouken@libsdl.org>
parents: 2159
diff changeset
   353
    int status = 0;
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   354
    if (context) {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   355
        if (context->hidden.stdio.autoclose) {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   356
            /* WARNING:  Check the return value here! */
2160
00adbaed3910 Updated to use size_t instead of int for amounts of data.
Sam Lantinga <slouken@libsdl.org>
parents: 2159
diff changeset
   357
            if (fclose(context->hidden.stdio.fp) != 0) {
7037
3fedf1f25b94 Make SDL_SetError and friends unconditionally return -1.
Ryan C. Gordon <icculus@icculus.org>
parents: 7011
diff changeset
   358
                status = SDL_Error(SDL_EFWRITE);
2160
00adbaed3910 Updated to use size_t instead of int for amounts of data.
Sam Lantinga <slouken@libsdl.org>
parents: 2159
diff changeset
   359
            }
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   360
        }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   361
        SDL_FreeRW(context);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   362
    }
2160
00adbaed3910 Updated to use size_t instead of int for amounts of data.
Sam Lantinga <slouken@libsdl.org>
parents: 2159
diff changeset
   363
    return status;
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   364
}
1446
47bf1767c4ca Date: Mon, 27 Feb 2006 02:17:29 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
   365
#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
   366
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   367
/* Functions to read/write memory pointers */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   368
6642
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   369
static Sint64 SDLCALL
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   370
mem_size(SDL_RWops * context)
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   371
{
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   372
    return (Sint64)(context->hidden.mem.stop - context->hidden.mem.base);
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   373
}
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   374
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   375
static Sint64 SDLCALL
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   376
mem_seek(SDL_RWops * context, Sint64 offset, int whence)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   377
{
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   378
    Uint8 *newpos;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   379
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   380
    switch (whence) {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   381
    case RW_SEEK_SET:
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   382
        newpos = context->hidden.mem.base + offset;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   383
        break;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   384
    case RW_SEEK_CUR:
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   385
        newpos = context->hidden.mem.here + offset;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   386
        break;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   387
    case RW_SEEK_END:
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   388
        newpos = context->hidden.mem.stop + offset;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   389
        break;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   390
    default:
7037
3fedf1f25b94 Make SDL_SetError and friends unconditionally return -1.
Ryan C. Gordon <icculus@icculus.org>
parents: 7011
diff changeset
   391
        return SDL_SetError("Unknown value for 'whence'");
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   392
    }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   393
    if (newpos < context->hidden.mem.base) {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   394
        newpos = context->hidden.mem.base;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   395
    }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   396
    if (newpos > context->hidden.mem.stop) {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   397
        newpos = context->hidden.mem.stop;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   398
    }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   399
    context->hidden.mem.here = newpos;
6642
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   400
    return (Sint64)(context->hidden.mem.here - context->hidden.mem.base);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   401
}
2735
204be4fc2726 Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents: 2185
diff changeset
   402
2160
00adbaed3910 Updated to use size_t instead of int for amounts of data.
Sam Lantinga <slouken@libsdl.org>
parents: 2159
diff changeset
   403
static size_t SDLCALL
00adbaed3910 Updated to use size_t instead of int for amounts of data.
Sam Lantinga <slouken@libsdl.org>
parents: 2159
diff changeset
   404
mem_read(SDL_RWops * context, void *ptr, size_t size, size_t maxnum)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   405
{
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   406
    size_t total_bytes;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   407
    size_t mem_available;
1078
e2ef6b7001fd Patch from Antonio SJ Musumeci:
Ryan C. Gordon <icculus@icculus.org>
parents: 769
diff changeset
   408
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   409
    total_bytes = (maxnum * size);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   410
    if ((maxnum <= 0) || (size <= 0)
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   411
        || ((total_bytes / maxnum) != (size_t) size)) {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   412
        return 0;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   413
    }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   414
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   415
    mem_available = (context->hidden.mem.stop - context->hidden.mem.here);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   416
    if (total_bytes > mem_available) {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   417
        total_bytes = mem_available;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   418
    }
1078
e2ef6b7001fd Patch from Antonio SJ Musumeci:
Ryan C. Gordon <icculus@icculus.org>
parents: 769
diff changeset
   419
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   420
    SDL_memcpy(ptr, context->hidden.mem.here, total_bytes);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   421
    context->hidden.mem.here += total_bytes;
1078
e2ef6b7001fd Patch from Antonio SJ Musumeci:
Ryan C. Gordon <icculus@icculus.org>
parents: 769
diff changeset
   422
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   423
    return (total_bytes / size);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   424
}
2735
204be4fc2726 Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents: 2185
diff changeset
   425
2160
00adbaed3910 Updated to use size_t instead of int for amounts of data.
Sam Lantinga <slouken@libsdl.org>
parents: 2159
diff changeset
   426
static size_t SDLCALL
00adbaed3910 Updated to use size_t instead of int for amounts of data.
Sam Lantinga <slouken@libsdl.org>
parents: 2159
diff changeset
   427
mem_write(SDL_RWops * context, const void *ptr, size_t size, size_t num)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   428
{
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   429
    if ((context->hidden.mem.here + (num * size)) > context->hidden.mem.stop) {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   430
        num = (context->hidden.mem.stop - context->hidden.mem.here) / size;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   431
    }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   432
    SDL_memcpy(context->hidden.mem.here, ptr, num * size);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   433
    context->hidden.mem.here += num * size;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   434
    return (num);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   435
}
2735
204be4fc2726 Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents: 2185
diff changeset
   436
2160
00adbaed3910 Updated to use size_t instead of int for amounts of data.
Sam Lantinga <slouken@libsdl.org>
parents: 2159
diff changeset
   437
static size_t SDLCALL
00adbaed3910 Updated to use size_t instead of int for amounts of data.
Sam Lantinga <slouken@libsdl.org>
parents: 2159
diff changeset
   438
mem_writeconst(SDL_RWops * context, const void *ptr, size_t size, size_t num)
764
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   439
{
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   440
    SDL_SetError("Can't write to read-only memory");
6996
bc0fd5bced25 Fix bug 1560 - SDL_RWFromConstMem write operation returns -1 but should return 0.
Andreas Schiffler <aschiffler@ferzkopp.net>
parents: 6885
diff changeset
   441
    return (0);
764
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   442
}
2735
204be4fc2726 Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents: 2185
diff changeset
   443
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   444
static int SDLCALL
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   445
mem_close(SDL_RWops * context)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   446
{
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   447
    if (context) {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   448
        SDL_FreeRW(context);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   449
    }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   450
    return (0);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   451
}
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   452
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   453
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   454
/* Functions to create SDL_RWops structures from various data sources */
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   455
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   456
SDL_RWops *
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   457
SDL_RWFromFile(const char *file, const char *mode)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   458
{
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   459
    SDL_RWops *rwops = NULL;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   460
    if (!file || !*file || !mode || !*mode) {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   461
        SDL_SetError("SDL_RWFromFile(): No file or no mode specified");
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   462
        return NULL;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   463
    }
5582
1281a3f1f0a6 Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents: 5535
diff changeset
   464
#if defined(ANDROID)
6629
8e2c731103e6 Try opening the file path directly before hitting the asset system.
Sam Lantinga <slouken@libsdl.org>
parents: 6430
diff changeset
   465
#ifdef HAVE_STDIO_H
8e2c731103e6 Try opening the file path directly before hitting the asset system.
Sam Lantinga <slouken@libsdl.org>
parents: 6430
diff changeset
   466
    /* Try to open the file on the filesystem first */
6633
e36b94438fcf Try opening relative path files from internal storage.
Sam Lantinga <slouken@libsdl.org>
parents: 6629
diff changeset
   467
    if (*file == '/') {
6629
8e2c731103e6 Try opening the file path directly before hitting the asset system.
Sam Lantinga <slouken@libsdl.org>
parents: 6430
diff changeset
   468
        FILE *fp = fopen(file, mode);
8e2c731103e6 Try opening the file path directly before hitting the asset system.
Sam Lantinga <slouken@libsdl.org>
parents: 6430
diff changeset
   469
        if (fp) {
8e2c731103e6 Try opening the file path directly before hitting the asset system.
Sam Lantinga <slouken@libsdl.org>
parents: 6430
diff changeset
   470
            return SDL_RWFromFP(fp, 1);
8e2c731103e6 Try opening the file path directly before hitting the asset system.
Sam Lantinga <slouken@libsdl.org>
parents: 6430
diff changeset
   471
        }
6633
e36b94438fcf Try opening relative path files from internal storage.
Sam Lantinga <slouken@libsdl.org>
parents: 6629
diff changeset
   472
    } else {
e36b94438fcf Try opening relative path files from internal storage.
Sam Lantinga <slouken@libsdl.org>
parents: 6629
diff changeset
   473
        /* Try opening it from internal storage if it's a relative path */
e36b94438fcf Try opening relative path files from internal storage.
Sam Lantinga <slouken@libsdl.org>
parents: 6629
diff changeset
   474
        char *path;
e36b94438fcf Try opening relative path files from internal storage.
Sam Lantinga <slouken@libsdl.org>
parents: 6629
diff changeset
   475
        FILE *fp;
e36b94438fcf Try opening relative path files from internal storage.
Sam Lantinga <slouken@libsdl.org>
parents: 6629
diff changeset
   476
e36b94438fcf Try opening relative path files from internal storage.
Sam Lantinga <slouken@libsdl.org>
parents: 6629
diff changeset
   477
        path = SDL_stack_alloc(char, PATH_MAX);
e36b94438fcf Try opening relative path files from internal storage.
Sam Lantinga <slouken@libsdl.org>
parents: 6629
diff changeset
   478
        if (path) {
e36b94438fcf Try opening relative path files from internal storage.
Sam Lantinga <slouken@libsdl.org>
parents: 6629
diff changeset
   479
            SDL_snprintf(path, PATH_MAX, "%s/%s",
e36b94438fcf Try opening relative path files from internal storage.
Sam Lantinga <slouken@libsdl.org>
parents: 6629
diff changeset
   480
                         SDL_AndroidGetInternalStoragePath(), file);
e36b94438fcf Try opening relative path files from internal storage.
Sam Lantinga <slouken@libsdl.org>
parents: 6629
diff changeset
   481
            fp = fopen(path, mode);
e36b94438fcf Try opening relative path files from internal storage.
Sam Lantinga <slouken@libsdl.org>
parents: 6629
diff changeset
   482
            SDL_stack_free(path);
e36b94438fcf Try opening relative path files from internal storage.
Sam Lantinga <slouken@libsdl.org>
parents: 6629
diff changeset
   483
            if (fp) {
e36b94438fcf Try opening relative path files from internal storage.
Sam Lantinga <slouken@libsdl.org>
parents: 6629
diff changeset
   484
                return SDL_RWFromFP(fp, 1);
e36b94438fcf Try opening relative path files from internal storage.
Sam Lantinga <slouken@libsdl.org>
parents: 6629
diff changeset
   485
            }
e36b94438fcf Try opening relative path files from internal storage.
Sam Lantinga <slouken@libsdl.org>
parents: 6629
diff changeset
   486
        }
6629
8e2c731103e6 Try opening the file path directly before hitting the asset system.
Sam Lantinga <slouken@libsdl.org>
parents: 6430
diff changeset
   487
    }
6633
e36b94438fcf Try opening relative path files from internal storage.
Sam Lantinga <slouken@libsdl.org>
parents: 6629
diff changeset
   488
#endif /* HAVE_STDIO_H */
6629
8e2c731103e6 Try opening the file path directly before hitting the asset system.
Sam Lantinga <slouken@libsdl.org>
parents: 6430
diff changeset
   489
8e2c731103e6 Try opening the file path directly before hitting the asset system.
Sam Lantinga <slouken@libsdl.org>
parents: 6430
diff changeset
   490
    /* Try to open the file from the asset system */
5582
1281a3f1f0a6 Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents: 5535
diff changeset
   491
    rwops = SDL_AllocRW();
1281a3f1f0a6 Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents: 5535
diff changeset
   492
    if (!rwops)
1281a3f1f0a6 Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents: 5535
diff changeset
   493
        return NULL;            /* SDL_SetError already setup by SDL_AllocRW() */
1281a3f1f0a6 Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents: 5535
diff changeset
   494
    if (Android_JNI_FileOpen(rwops, file, mode) < 0) {
1281a3f1f0a6 Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents: 5535
diff changeset
   495
        SDL_FreeRW(rwops);
1281a3f1f0a6 Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents: 5535
diff changeset
   496
        return NULL;
1281a3f1f0a6 Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents: 5535
diff changeset
   497
    }
6642
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   498
    rwops->size = Android_JNI_FileSize;
5582
1281a3f1f0a6 Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents: 5535
diff changeset
   499
    rwops->seek = Android_JNI_FileSeek;
1281a3f1f0a6 Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents: 5535
diff changeset
   500
    rwops->read = Android_JNI_FileRead;
1281a3f1f0a6 Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents: 5535
diff changeset
   501
    rwops->write = Android_JNI_FileWrite;
1281a3f1f0a6 Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents: 5535
diff changeset
   502
    rwops->close = Android_JNI_FileClose;
6999
681820ca0e78 Fix bug 122 - SDL_RWops bug fixes: set RWops.type field, add input validation, add test coverage
Andreas Schiffler <aschiffler@ferzkopp.net>
parents: 6996
diff changeset
   503
    rwops->type = SDL_RWOPS_JNIFILE;
5582
1281a3f1f0a6 Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents: 5535
diff changeset
   504
1281a3f1f0a6 Allow Android platforms to read from .apk files via the RWOPS interface.
Ryan C. Gordon <icculus@icculus.org>
parents: 5535
diff changeset
   505
#elif defined(__WIN32__)
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   506
    rwops = SDL_AllocRW();
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   507
    if (!rwops)
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   508
        return NULL;            /* SDL_SetError already setup by SDL_AllocRW() */
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   509
    if (windows_file_open(rwops, file, mode) < 0) {
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   510
        SDL_FreeRW(rwops);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   511
        return NULL;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   512
    }
6642
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   513
    rwops->size = windows_file_size;
5062
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   514
    rwops->seek = windows_file_seek;
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   515
    rwops->read = windows_file_read;
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   516
    rwops->write = windows_file_write;
e8916fe9cfc8 Fixed bug #925
Sam Lantinga <slouken@libsdl.org>
parents: 4454
diff changeset
   517
    rwops->close = windows_file_close;
6999
681820ca0e78 Fix bug 122 - SDL_RWops bug fixes: set RWops.type field, add input validation, add test coverage
Andreas Schiffler <aschiffler@ferzkopp.net>
parents: 6996
diff changeset
   518
    rwops->type = SDL_RWOPS_WINFILE;
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   519
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   520
#elif HAVE_STDIO_H
6375
93f9a24d1c02 Fixed some minor compiler warnings.
Ryan C. Gordon <icculus@icculus.org>
parents: 6138
diff changeset
   521
    {
7191
75360622e65f File style cleanup for the SDL 2.0 release
Sam Lantinga <slouken@libsdl.org>
parents: 7070
diff changeset
   522
        #ifdef __APPLE__
75360622e65f File style cleanup for the SDL 2.0 release
Sam Lantinga <slouken@libsdl.org>
parents: 7070
diff changeset
   523
        FILE *fp = SDL_OpenFPFromBundleOrFallback(file, mode);
6375
93f9a24d1c02 Fixed some minor compiler warnings.
Ryan C. Gordon <icculus@icculus.org>
parents: 6138
diff changeset
   524
        #else
7191
75360622e65f File style cleanup for the SDL 2.0 release
Sam Lantinga <slouken@libsdl.org>
parents: 7070
diff changeset
   525
        FILE *fp = fopen(file, mode);
75360622e65f File style cleanup for the SDL 2.0 release
Sam Lantinga <slouken@libsdl.org>
parents: 7070
diff changeset
   526
        #endif
75360622e65f File style cleanup for the SDL 2.0 release
Sam Lantinga <slouken@libsdl.org>
parents: 7070
diff changeset
   527
        if (fp == NULL) {
6375
93f9a24d1c02 Fixed some minor compiler warnings.
Ryan C. Gordon <icculus@icculus.org>
parents: 6138
diff changeset
   528
            SDL_SetError("Couldn't open %s", file);
93f9a24d1c02 Fixed some minor compiler warnings.
Ryan C. Gordon <icculus@icculus.org>
parents: 6138
diff changeset
   529
        } else {
93f9a24d1c02 Fixed some minor compiler warnings.
Ryan C. Gordon <icculus@icculus.org>
parents: 6138
diff changeset
   530
            rwops = SDL_RWFromFP(fp, 1);
93f9a24d1c02 Fixed some minor compiler warnings.
Ryan C. Gordon <icculus@icculus.org>
parents: 6138
diff changeset
   531
        }
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   532
    }
1447
515df0086eb7 Prefer the raw Win32 API over stdio for file RWops
Sam Lantinga <slouken@libsdl.org>
parents: 1446
diff changeset
   533
#else
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   534
    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
   535
#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
   536
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   537
    return (rwops);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   538
}
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   539
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
   540
#ifdef HAVE_STDIO_H
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   541
SDL_RWops *
2161
e635db5b45ef Oh yeah, they're boolean values...
Sam Lantinga <slouken@libsdl.org>
parents: 2160
diff changeset
   542
SDL_RWFromFP(FILE * fp, SDL_bool autoclose)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   543
{
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   544
    SDL_RWops *rwops = NULL;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   545
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   546
    rwops = SDL_AllocRW();
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   547
    if (rwops != NULL) {
6642
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   548
        rwops->size = stdio_size;
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   549
        rwops->seek = stdio_seek;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   550
        rwops->read = stdio_read;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   551
        rwops->write = stdio_write;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   552
        rwops->close = stdio_close;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   553
        rwops->hidden.stdio.fp = fp;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   554
        rwops->hidden.stdio.autoclose = autoclose;
6999
681820ca0e78 Fix bug 122 - SDL_RWops bug fixes: set RWops.type field, add input validation, add test coverage
Andreas Schiffler <aschiffler@ferzkopp.net>
parents: 6996
diff changeset
   555
        rwops->type = SDL_RWOPS_STDFILE;
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   556
    }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   557
    return (rwops);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   558
}
3564
d264d99576c1 Add a dummy function if SDL doesn't have STDIO support
Sam Lantinga <slouken@libsdl.org>
parents: 3253
diff changeset
   559
#else
d264d99576c1 Add a dummy function if SDL doesn't have STDIO support
Sam Lantinga <slouken@libsdl.org>
parents: 3253
diff changeset
   560
SDL_RWops *
d264d99576c1 Add a dummy function if SDL doesn't have STDIO support
Sam Lantinga <slouken@libsdl.org>
parents: 3253
diff changeset
   561
SDL_RWFromFP(void * fp, SDL_bool autoclose)
d264d99576c1 Add a dummy function if SDL doesn't have STDIO support
Sam Lantinga <slouken@libsdl.org>
parents: 3253
diff changeset
   562
{
d264d99576c1 Add a dummy function if SDL doesn't have STDIO support
Sam Lantinga <slouken@libsdl.org>
parents: 3253
diff changeset
   563
    SDL_SetError("SDL not compiled with stdio support");
d264d99576c1 Add a dummy function if SDL doesn't have STDIO support
Sam Lantinga <slouken@libsdl.org>
parents: 3253
diff changeset
   564
    return NULL;
d264d99576c1 Add a dummy function if SDL doesn't have STDIO support
Sam Lantinga <slouken@libsdl.org>
parents: 3253
diff changeset
   565
}
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
   566
#endif /* HAVE_STDIO_H */
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   567
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   568
SDL_RWops *
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   569
SDL_RWFromMem(void *mem, int size)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   570
{
6999
681820ca0e78 Fix bug 122 - SDL_RWops bug fixes: set RWops.type field, add input validation, add test coverage
Andreas Schiffler <aschiffler@ferzkopp.net>
parents: 6996
diff changeset
   571
    SDL_RWops *rwops = NULL;
681820ca0e78 Fix bug 122 - SDL_RWops bug fixes: set RWops.type field, add input validation, add test coverage
Andreas Schiffler <aschiffler@ferzkopp.net>
parents: 6996
diff changeset
   572
    if (!mem) {
681820ca0e78 Fix bug 122 - SDL_RWops bug fixes: set RWops.type field, add input validation, add test coverage
Andreas Schiffler <aschiffler@ferzkopp.net>
parents: 6996
diff changeset
   573
      SDL_InvalidParamError("mem");
681820ca0e78 Fix bug 122 - SDL_RWops bug fixes: set RWops.type field, add input validation, add test coverage
Andreas Schiffler <aschiffler@ferzkopp.net>
parents: 6996
diff changeset
   574
      return (rwops);
681820ca0e78 Fix bug 122 - SDL_RWops bug fixes: set RWops.type field, add input validation, add test coverage
Andreas Schiffler <aschiffler@ferzkopp.net>
parents: 6996
diff changeset
   575
    }
681820ca0e78 Fix bug 122 - SDL_RWops bug fixes: set RWops.type field, add input validation, add test coverage
Andreas Schiffler <aschiffler@ferzkopp.net>
parents: 6996
diff changeset
   576
    if (!size) {
681820ca0e78 Fix bug 122 - SDL_RWops bug fixes: set RWops.type field, add input validation, add test coverage
Andreas Schiffler <aschiffler@ferzkopp.net>
parents: 6996
diff changeset
   577
      SDL_InvalidParamError("size");
681820ca0e78 Fix bug 122 - SDL_RWops bug fixes: set RWops.type field, add input validation, add test coverage
Andreas Schiffler <aschiffler@ferzkopp.net>
parents: 6996
diff changeset
   578
      return (rwops);
681820ca0e78 Fix bug 122 - SDL_RWops bug fixes: set RWops.type field, add input validation, add test coverage
Andreas Schiffler <aschiffler@ferzkopp.net>
parents: 6996
diff changeset
   579
    }
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   580
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   581
    rwops = SDL_AllocRW();
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   582
    if (rwops != NULL) {
6642
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   583
        rwops->size = mem_size;
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   584
        rwops->seek = mem_seek;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   585
        rwops->read = mem_read;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   586
        rwops->write = mem_write;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   587
        rwops->close = mem_close;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   588
        rwops->hidden.mem.base = (Uint8 *) mem;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   589
        rwops->hidden.mem.here = rwops->hidden.mem.base;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   590
        rwops->hidden.mem.stop = rwops->hidden.mem.base + size;
6999
681820ca0e78 Fix bug 122 - SDL_RWops bug fixes: set RWops.type field, add input validation, add test coverage
Andreas Schiffler <aschiffler@ferzkopp.net>
parents: 6996
diff changeset
   591
        rwops->type = SDL_RWOPS_MEMORY;
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   592
    }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   593
    return (rwops);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   594
}
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   595
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   596
SDL_RWops *
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   597
SDL_RWFromConstMem(const void *mem, int size)
764
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   598
{
6999
681820ca0e78 Fix bug 122 - SDL_RWops bug fixes: set RWops.type field, add input validation, add test coverage
Andreas Schiffler <aschiffler@ferzkopp.net>
parents: 6996
diff changeset
   599
    SDL_RWops *rwops = NULL;
681820ca0e78 Fix bug 122 - SDL_RWops bug fixes: set RWops.type field, add input validation, add test coverage
Andreas Schiffler <aschiffler@ferzkopp.net>
parents: 6996
diff changeset
   600
    if (!mem) {
681820ca0e78 Fix bug 122 - SDL_RWops bug fixes: set RWops.type field, add input validation, add test coverage
Andreas Schiffler <aschiffler@ferzkopp.net>
parents: 6996
diff changeset
   601
      SDL_InvalidParamError("mem");
681820ca0e78 Fix bug 122 - SDL_RWops bug fixes: set RWops.type field, add input validation, add test coverage
Andreas Schiffler <aschiffler@ferzkopp.net>
parents: 6996
diff changeset
   602
      return (rwops);
681820ca0e78 Fix bug 122 - SDL_RWops bug fixes: set RWops.type field, add input validation, add test coverage
Andreas Schiffler <aschiffler@ferzkopp.net>
parents: 6996
diff changeset
   603
    }
681820ca0e78 Fix bug 122 - SDL_RWops bug fixes: set RWops.type field, add input validation, add test coverage
Andreas Schiffler <aschiffler@ferzkopp.net>
parents: 6996
diff changeset
   604
    if (!size) {
681820ca0e78 Fix bug 122 - SDL_RWops bug fixes: set RWops.type field, add input validation, add test coverage
Andreas Schiffler <aschiffler@ferzkopp.net>
parents: 6996
diff changeset
   605
      SDL_InvalidParamError("size");
681820ca0e78 Fix bug 122 - SDL_RWops bug fixes: set RWops.type field, add input validation, add test coverage
Andreas Schiffler <aschiffler@ferzkopp.net>
parents: 6996
diff changeset
   606
      return (rwops);
681820ca0e78 Fix bug 122 - SDL_RWops bug fixes: set RWops.type field, add input validation, add test coverage
Andreas Schiffler <aschiffler@ferzkopp.net>
parents: 6996
diff changeset
   607
    }
764
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   608
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   609
    rwops = SDL_AllocRW();
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   610
    if (rwops != NULL) {
6642
b716011e53ce Added an API to get the size of a file - WARNING! ABI CHANGE!
Sam Lantinga <slouken@libsdl.org>
parents: 6633
diff changeset
   611
        rwops->size = mem_size;
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   612
        rwops->seek = mem_seek;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   613
        rwops->read = mem_read;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   614
        rwops->write = mem_writeconst;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   615
        rwops->close = mem_close;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   616
        rwops->hidden.mem.base = (Uint8 *) mem;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   617
        rwops->hidden.mem.here = rwops->hidden.mem.base;
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   618
        rwops->hidden.mem.stop = rwops->hidden.mem.base + size;
6999
681820ca0e78 Fix bug 122 - SDL_RWops bug fixes: set RWops.type field, add input validation, add test coverage
Andreas Schiffler <aschiffler@ferzkopp.net>
parents: 6996
diff changeset
   619
        rwops->type = SDL_RWOPS_MEMORY_RO;
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   620
    }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   621
    return (rwops);
764
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   622
}
974c0fb74bf8 Added function to create RWops from const memory: SDL_RWFromConstMem()
Sam Lantinga <slouken@libsdl.org>
parents: 543
diff changeset
   623
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   624
SDL_RWops *
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   625
SDL_AllocRW(void)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   626
{
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   627
    SDL_RWops *area;
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   628
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   629
    area = (SDL_RWops *) SDL_malloc(sizeof *area);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   630
    if (area == NULL) {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   631
        SDL_OutOfMemory();
7070
65df21723f58 Fixed bug 1802 - NULL pointer dereference in SDL_AllocRW() if out of memory.
Sam Lantinga <slouken@libsdl.org>
parents: 7037
diff changeset
   632
    } else {
65df21723f58 Fixed bug 1802 - NULL pointer dereference in SDL_AllocRW() if out of memory.
Sam Lantinga <slouken@libsdl.org>
parents: 7037
diff changeset
   633
        area->type = SDL_RWOPS_UNKNOWN;
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   634
    }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   635
    return (area);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   636
}
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   637
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   638
void
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   639
SDL_FreeRW(SDL_RWops * area)
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   640
{
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   641
    SDL_free(area);
0
74212992fb08 Initial revision
Sam Lantinga <slouken@lokigames.com>
parents:
diff changeset
   642
}
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   643
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   644
/* 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
   645
6655
6a3e741ea70d Added SDL_ReadU8() and SDL_WriteU8() for consistency with the rest of the API.
Sam Lantinga <slouken@libsdl.org>
parents: 6644
diff changeset
   646
Uint8
6a3e741ea70d Added SDL_ReadU8() and SDL_WriteU8() for consistency with the rest of the API.
Sam Lantinga <slouken@libsdl.org>
parents: 6644
diff changeset
   647
SDL_ReadU8(SDL_RWops * src)
6a3e741ea70d Added SDL_ReadU8() and SDL_WriteU8() for consistency with the rest of the API.
Sam Lantinga <slouken@libsdl.org>
parents: 6644
diff changeset
   648
{
6a3e741ea70d Added SDL_ReadU8() and SDL_WriteU8() for consistency with the rest of the API.
Sam Lantinga <slouken@libsdl.org>
parents: 6644
diff changeset
   649
    Uint8 value = 0;
6a3e741ea70d Added SDL_ReadU8() and SDL_WriteU8() for consistency with the rest of the API.
Sam Lantinga <slouken@libsdl.org>
parents: 6644
diff changeset
   650
6a3e741ea70d Added SDL_ReadU8() and SDL_WriteU8() for consistency with the rest of the API.
Sam Lantinga <slouken@libsdl.org>
parents: 6644
diff changeset
   651
    SDL_RWread(src, &value, (sizeof value), 1);
6a3e741ea70d Added SDL_ReadU8() and SDL_WriteU8() for consistency with the rest of the API.
Sam Lantinga <slouken@libsdl.org>
parents: 6644
diff changeset
   652
    return value;
6a3e741ea70d Added SDL_ReadU8() and SDL_WriteU8() for consistency with the rest of the API.
Sam Lantinga <slouken@libsdl.org>
parents: 6644
diff changeset
   653
}
6a3e741ea70d Added SDL_ReadU8() and SDL_WriteU8() for consistency with the rest of the API.
Sam Lantinga <slouken@libsdl.org>
parents: 6644
diff changeset
   654
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   655
Uint16
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   656
SDL_ReadLE16(SDL_RWops * src)
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   657
{
6655
6a3e741ea70d Added SDL_ReadU8() and SDL_WriteU8() for consistency with the rest of the API.
Sam Lantinga <slouken@libsdl.org>
parents: 6644
diff changeset
   658
    Uint16 value = 0;
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   659
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   660
    SDL_RWread(src, &value, (sizeof value), 1);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   661
    return (SDL_SwapLE16(value));
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   662
}
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   663
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   664
Uint16
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   665
SDL_ReadBE16(SDL_RWops * src)
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   666
{
6655
6a3e741ea70d Added SDL_ReadU8() and SDL_WriteU8() for consistency with the rest of the API.
Sam Lantinga <slouken@libsdl.org>
parents: 6644
diff changeset
   667
    Uint16 value = 0;
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   668
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   669
    SDL_RWread(src, &value, (sizeof value), 1);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   670
    return (SDL_SwapBE16(value));
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   671
}
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   672
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   673
Uint32
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   674
SDL_ReadLE32(SDL_RWops * src)
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   675
{
6655
6a3e741ea70d Added SDL_ReadU8() and SDL_WriteU8() for consistency with the rest of the API.
Sam Lantinga <slouken@libsdl.org>
parents: 6644
diff changeset
   676
    Uint32 value = 0;
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   677
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   678
    SDL_RWread(src, &value, (sizeof value), 1);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   679
    return (SDL_SwapLE32(value));
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   680
}
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   681
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   682
Uint32
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   683
SDL_ReadBE32(SDL_RWops * src)
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   684
{
6655
6a3e741ea70d Added SDL_ReadU8() and SDL_WriteU8() for consistency with the rest of the API.
Sam Lantinga <slouken@libsdl.org>
parents: 6644
diff changeset
   685
    Uint32 value = 0;
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   686
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   687
    SDL_RWread(src, &value, (sizeof value), 1);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   688
    return (SDL_SwapBE32(value));
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   689
}
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   690
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   691
Uint64
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   692
SDL_ReadLE64(SDL_RWops * src)
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   693
{
6655
6a3e741ea70d Added SDL_ReadU8() and SDL_WriteU8() for consistency with the rest of the API.
Sam Lantinga <slouken@libsdl.org>
parents: 6644
diff changeset
   694
    Uint64 value = 0;
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   695
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   696
    SDL_RWread(src, &value, (sizeof value), 1);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   697
    return (SDL_SwapLE64(value));
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   698
}
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   699
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   700
Uint64
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   701
SDL_ReadBE64(SDL_RWops * src)
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   702
{
6655
6a3e741ea70d Added SDL_ReadU8() and SDL_WriteU8() for consistency with the rest of the API.
Sam Lantinga <slouken@libsdl.org>
parents: 6644
diff changeset
   703
    Uint64 value = 0;
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   704
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   705
    SDL_RWread(src, &value, (sizeof value), 1);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   706
    return (SDL_SwapBE64(value));
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   707
}
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   708
3253
5d7ef5970073 Fixed issues building 64-bit Windows binary
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
   709
size_t
6655
6a3e741ea70d Added SDL_ReadU8() and SDL_WriteU8() for consistency with the rest of the API.
Sam Lantinga <slouken@libsdl.org>
parents: 6644
diff changeset
   710
SDL_WriteU8(SDL_RWops * dst, Uint8 value)
6a3e741ea70d Added SDL_ReadU8() and SDL_WriteU8() for consistency with the rest of the API.
Sam Lantinga <slouken@libsdl.org>
parents: 6644
diff changeset
   711
{
6a3e741ea70d Added SDL_ReadU8() and SDL_WriteU8() for consistency with the rest of the API.
Sam Lantinga <slouken@libsdl.org>
parents: 6644
diff changeset
   712
    return (SDL_RWwrite(dst, &value, (sizeof value), 1));
6a3e741ea70d Added SDL_ReadU8() and SDL_WriteU8() for consistency with the rest of the API.
Sam Lantinga <slouken@libsdl.org>
parents: 6644
diff changeset
   713
}
6a3e741ea70d Added SDL_ReadU8() and SDL_WriteU8() for consistency with the rest of the API.
Sam Lantinga <slouken@libsdl.org>
parents: 6644
diff changeset
   714
6a3e741ea70d Added SDL_ReadU8() and SDL_WriteU8() for consistency with the rest of the API.
Sam Lantinga <slouken@libsdl.org>
parents: 6644
diff changeset
   715
size_t
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   716
SDL_WriteLE16(SDL_RWops * dst, Uint16 value)
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   717
{
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   718
    value = SDL_SwapLE16(value);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   719
    return (SDL_RWwrite(dst, &value, (sizeof value), 1));
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   720
}
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   721
3253
5d7ef5970073 Fixed issues building 64-bit Windows binary
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
   722
size_t
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   723
SDL_WriteBE16(SDL_RWops * dst, Uint16 value)
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   724
{
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   725
    value = SDL_SwapBE16(value);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   726
    return (SDL_RWwrite(dst, &value, (sizeof value), 1));
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   727
}
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   728
3253
5d7ef5970073 Fixed issues building 64-bit Windows binary
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
   729
size_t
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   730
SDL_WriteLE32(SDL_RWops * dst, Uint32 value)
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   731
{
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   732
    value = SDL_SwapLE32(value);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   733
    return (SDL_RWwrite(dst, &value, (sizeof value), 1));
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   734
}
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   735
3253
5d7ef5970073 Fixed issues building 64-bit Windows binary
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
   736
size_t
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   737
SDL_WriteBE32(SDL_RWops * dst, Uint32 value)
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   738
{
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   739
    value = SDL_SwapBE32(value);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   740
    return (SDL_RWwrite(dst, &value, (sizeof value), 1));
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   741
}
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   742
3253
5d7ef5970073 Fixed issues building 64-bit Windows binary
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
   743
size_t
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   744
SDL_WriteLE64(SDL_RWops * dst, Uint64 value)
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   745
{
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   746
    value = SDL_SwapLE64(value);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   747
    return (SDL_RWwrite(dst, &value, (sizeof value), 1));
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   748
}
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   749
3253
5d7ef5970073 Fixed issues building 64-bit Windows binary
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
   750
size_t
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   751
SDL_WriteBE64(SDL_RWops * dst, Uint64 value)
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   752
{
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   753
    value = SDL_SwapBE64(value);
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   754
    return (SDL_RWwrite(dst, &value, (sizeof value), 1));
1354
22f39393668a Fixed build problem with SDL_string.c
Sam Lantinga <slouken@libsdl.org>
parents: 1338
diff changeset
   755
}
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   756
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents: 1769
diff changeset
   757
/* vi: set ts=4 sw=4 expandtab: */