misc/libphysfs/physfs_internal.h
author Wuzzy <almikes@aol.com>
Wed, 12 Apr 2017 19:46:59 +0200
changeset 12235 0844c680b4bc
parent 12213 bb5522e88ab2
permissions -rw-r--r--
Redraw audio icon in settings menu be more HW style-like
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
     1
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
     2
 * Internal function/structure declaration. Do NOT include in your
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
     3
 *  application.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
     4
 *
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
     5
 * Please see the file LICENSE.txt in the source's root directory.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
     6
 *
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
     7
 *  This file written by Ryan C. Gordon.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
     8
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
     9
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    10
#ifndef _INCLUDE_PHYSFS_INTERNAL_H_
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    11
#define _INCLUDE_PHYSFS_INTERNAL_H_
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    12
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    13
#ifndef __PHYSICSFS_INTERNAL__
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    14
#error Do not include this header from your applications.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    15
#endif
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    16
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    17
#include "physfs.h"
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    18
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    19
/* The holy trinity. */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    20
#include <stdio.h>
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    21
#include <stdlib.h>
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    22
#include <string.h>
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    23
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    24
#include "physfs_platforms.h"
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    25
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    26
#include <assert.h>
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    27
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    28
/* !!! FIXME: remove this when revamping stack allocation code... */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    29
#if defined(_MSC_VER) || defined(__MINGW32__)
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    30
#include <malloc.h>
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    31
#endif
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    32
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    33
#if PHYSFS_PLATFORM_SOLARIS
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    34
#include <alloca.h>
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    35
#endif
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    36
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    37
#ifdef __cplusplus
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    38
extern "C" {
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    39
#endif
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    40
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    41
#ifdef __GNUC__
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    42
#define PHYSFS_MINIMUM_GCC_VERSION(major, minor) \
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    43
    ( ((__GNUC__ << 16) + __GNUC_MINOR__) >= (((major) << 16) + (minor)) )
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    44
#else
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    45
#define PHYSFS_MINIMUM_GCC_VERSION(major, minor) (0)
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    46
#endif
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    47
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    48
#ifdef __cplusplus
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    49
    /* C++ always has a real inline keyword. */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    50
#elif (defined macintosh) && !(defined __MWERKS__)
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    51
#   define inline
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    52
#elif (defined _MSC_VER)
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    53
#   define inline __inline
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    54
#endif
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    55
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    56
#if PHYSFS_PLATFORM_LINUX && !defined(_FILE_OFFSET_BITS)
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    57
#define _FILE_OFFSET_BITS 64
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    58
#endif
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    59
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    60
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    61
 * Interface for small allocations. If you need a little scratch space for
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    62
 *  a throwaway buffer or string, use this. It will make small allocations
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    63
 *  on the stack if possible, and use allocator.Malloc() if they are too
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    64
 *  large. This helps reduce malloc pressure.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    65
 * There are some rules, though:
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    66
 * NEVER return a pointer from this, as stack-allocated buffers go away
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    67
 *  when your function returns.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    68
 * NEVER allocate in a loop, as stack-allocated pointers will pile up. Call
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    69
 *  a function that uses smallAlloc from your loop, so the allocation can
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    70
 *  free each time.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    71
 * NEVER call smallAlloc with any complex expression (it's a macro that WILL
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    72
 *  have side effects...it references the argument multiple times). Use a
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    73
 *  variable or a literal.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    74
 * NEVER free a pointer from this with anything but smallFree. It will not
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    75
 *  be a valid pointer to the allocator, regardless of where the memory came
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    76
 *  from.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    77
 * NEVER realloc a pointer from this.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    78
 * NEVER forget to use smallFree: it may not be a pointer from the stack.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    79
 * NEVER forget to check for NULL...allocation can fail here, of course!
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    80
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    81
#define __PHYSFS_SMALLALLOCTHRESHOLD 256
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    82
void *__PHYSFS_initSmallAlloc(void *ptr, PHYSFS_uint64 len);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    83
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    84
#define __PHYSFS_smallAlloc(bytes) ( \
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    85
    __PHYSFS_initSmallAlloc( \
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    86
        (((bytes) < __PHYSFS_SMALLALLOCTHRESHOLD) ? \
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    87
            alloca((size_t)((bytes)+sizeof(void*))) : NULL), (bytes)) \
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    88
)
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    89
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    90
void __PHYSFS_smallFree(void *ptr);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    91
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    92
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    93
/* Use the allocation hooks. */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    94
#define malloc(x) Do not use malloc() directly.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    95
#define realloc(x, y) Do not use realloc() directly.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    96
#define free(x) Do not use free() directly.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    97
/* !!! FIXME: add alloca check here. */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    98
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
    99
#ifndef PHYSFS_SUPPORTS_ZIP
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   100
#define PHYSFS_SUPPORTS_ZIP 1
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   101
#endif
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   102
#ifndef PHYSFS_SUPPORTS_7Z
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   103
#define PHYSFS_SUPPORTS_7Z 0
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   104
#endif
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   105
#ifndef PHYSFS_SUPPORTS_GRP
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   106
#define PHYSFS_SUPPORTS_GRP 0
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   107
#endif
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   108
#ifndef PHYSFS_SUPPORTS_HOG
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   109
#define PHYSFS_SUPPORTS_HOG 0
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   110
#endif
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   111
#ifndef PHYSFS_SUPPORTS_MVL
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   112
#define PHYSFS_SUPPORTS_MVL 0
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   113
#endif
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   114
#ifndef PHYSFS_SUPPORTS_WAD
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   115
#define PHYSFS_SUPPORTS_WAD 0
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   116
#endif
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   117
#ifndef PHYSFS_SUPPORTS_SLB
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   118
#define PHYSFS_SUPPORTS_SLB 0
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   119
#endif
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   120
#ifndef PHYSFS_SUPPORTS_ISO9660
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   121
#define PHYSFS_SUPPORTS_ISO9660 0
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   122
#endif
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   123
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   124
/* The latest supported PHYSFS_Io::version value. */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   125
#define CURRENT_PHYSFS_IO_API_VERSION 0
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   126
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   127
/* The latest supported PHYSFS_Archiver::version value. */
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   128
#define CURRENT_PHYSFS_ARCHIVER_API_VERSION 0
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   129
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   130
/* This byteorder stuff was lifted from SDL. https://www.libsdl.org/ */
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   131
#define PHYSFS_LIL_ENDIAN  1234
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   132
#define PHYSFS_BIG_ENDIAN  4321
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   133
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   134
#ifdef __linux__
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   135
#include <endian.h>
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   136
#define PHYSFS_BYTEORDER  __BYTE_ORDER
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   137
#else /* __linux__ */
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   138
#if defined(__hppa__) || \
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   139
    defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   140
    (defined(__MIPS__) && defined(__MISPEB__)) || \
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   141
    defined(__ppc__) || defined(__POWERPC__) || defined(_M_PPC) || \
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   142
    defined(__sparc__)
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   143
#define PHYSFS_BYTEORDER   PHYSFS_BIG_ENDIAN
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   144
#else
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   145
#define PHYSFS_BYTEORDER   PHYSFS_LIL_ENDIAN
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   146
#endif
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   147
#endif /* __linux__ */
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   148
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   149
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   150
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   151
 * When sorting the entries in an archive, we use a modified QuickSort.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   152
 *  When there are less then PHYSFS_QUICKSORT_THRESHOLD entries left to sort,
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   153
 *  we switch over to a BubbleSort for the remainder. Tweak to taste.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   154
 *
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   155
 * You can override this setting by defining PHYSFS_QUICKSORT_THRESHOLD
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   156
 *  before #including "physfs_internal.h".
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   157
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   158
#ifndef PHYSFS_QUICKSORT_THRESHOLD
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   159
#define PHYSFS_QUICKSORT_THRESHOLD 4
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   160
#endif
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   161
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   162
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   163
 * Sort an array (or whatever) of (max) elements. This uses a mixture of
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   164
 *  a QuickSort and BubbleSort internally.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   165
 * (cmpfn) is used to determine ordering, and (swapfn) does the actual
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   166
 *  swapping of elements in the list.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   167
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   168
void __PHYSFS_sort(void *entries, size_t max,
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   169
                   int (*cmpfn)(void *, size_t, size_t),
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   170
                   void (*swapfn)(void *, size_t, size_t));
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   171
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   172
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   173
 * This isn't a formal error code, it's just for BAIL_MACRO.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   174
 *  It means: there was an error, but someone else already set it for us.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   175
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   176
#define ERRPASS PHYSFS_ERR_OK
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   177
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   178
/* These get used all over for lessening code clutter. */
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   179
#define BAIL_MACRO(e, r) do { if (e) PHYSFS_setErrorCode(e); return r; } while (0)
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   180
#define BAIL_IF_MACRO(c, e, r) do { if (c) { if (e) PHYSFS_setErrorCode(e); return r; } } while (0)
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   181
#define BAIL_MACRO_MUTEX(e, m, r) do { if (e) PHYSFS_setErrorCode(e); __PHYSFS_platformReleaseMutex(m); return r; } while (0)
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   182
#define BAIL_IF_MACRO_MUTEX(c, e, m, r) do { if (c) { if (e) PHYSFS_setErrorCode(e); __PHYSFS_platformReleaseMutex(m); return r; } } while (0)
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   183
#define GOTO_MACRO(e, g) do { if (e) PHYSFS_setErrorCode(e); goto g; } while (0)
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   184
#define GOTO_IF_MACRO(c, e, g) do { if (c) { if (e) PHYSFS_setErrorCode(e); goto g; } } while (0)
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   185
#define GOTO_MACRO_MUTEX(e, m, g) do { if (e) PHYSFS_setErrorCode(e); __PHYSFS_platformReleaseMutex(m); goto g; } while (0)
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   186
#define GOTO_IF_MACRO_MUTEX(c, e, m, g) do { if (c) { if (e) PHYSFS_setErrorCode(e); __PHYSFS_platformReleaseMutex(m); goto g; } } while (0)
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   187
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   188
#define __PHYSFS_ARRAYLEN(x) ( (sizeof (x)) / (sizeof (x[0])) )
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   189
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   190
#ifdef PHYSFS_NO_64BIT_SUPPORT
9188
ba9cca49a5e2 backout r1bed4aee19e0 and r3883b5dc600c
koda
parents: 9110
diff changeset
   191
#define __PHYSFS_SI64(x) ((PHYSFS_sint64) (x))
ba9cca49a5e2 backout r1bed4aee19e0 and r3883b5dc600c
koda
parents: 9110
diff changeset
   192
#define __PHYSFS_UI64(x) ((PHYSFS_uint64) (x))
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   193
#elif (defined __GNUC__)
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   194
#define __PHYSFS_SI64(x) x##LL
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   195
#define __PHYSFS_UI64(x) x##ULL
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   196
#elif (defined _MSC_VER)
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   197
#define __PHYSFS_SI64(x) x##i64
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   198
#define __PHYSFS_UI64(x) x##ui64
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   199
#else
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   200
#define __PHYSFS_SI64(x) ((PHYSFS_sint64) (x))
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   201
#define __PHYSFS_UI64(x) ((PHYSFS_uint64) (x))
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   202
#endif
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   203
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   204
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   205
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   206
 * Check if a ui64 will fit in the platform's address space.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   207
 *  The initial sizeof check will optimize this macro out entirely on
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   208
 *  64-bit (and larger?!) platforms, and the other condition will
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   209
 *  return zero or non-zero if the variable will fit in the platform's
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   210
 *  size_t, suitable to pass to malloc. This is kinda messy, but effective.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   211
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   212
#define __PHYSFS_ui64FitsAddressSpace(s) ( \
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   213
    (sizeof (PHYSFS_uint64) <= sizeof (size_t)) || \
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   214
    ((s) < (__PHYSFS_UI64(0xFFFFFFFFFFFFFFFF) >> (64-(sizeof(size_t)*8)))) \
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   215
)
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   216
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   217
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   218
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   219
 * This is a strcasecmp() or stricmp() replacement that expects both strings
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   220
 *  to be in UTF-8 encoding. It will do "case folding" to decide if the
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   221
 *  Unicode codepoints in the strings match.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   222
 *
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   223
 * It will report which string is "greater than" the other, but be aware that
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   224
 *  this doesn't necessarily mean anything: 'a' may be "less than" 'b', but
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   225
 *  a random Kanji codepoint has no meaningful alphabetically relationship to
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   226
 *  a Greek Lambda, but being able to assign a reliable "value" makes sorting
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   227
 *  algorithms possible, if not entirely sane. Most cases should treat the
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   228
 *  return value as "equal" or "not equal".
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   229
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   230
int __PHYSFS_utf8stricmp(const char *s1, const char *s2);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   231
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   232
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   233
 * This works like __PHYSFS_utf8stricmp(), but takes a character (NOT BYTE
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   234
 *  COUNT) argument, like strcasencmp().
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   235
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   236
int __PHYSFS_utf8strnicmp(const char *s1, const char *s2, PHYSFS_uint32 l);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   237
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   238
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   239
 * stricmp() that guarantees to only work with low ASCII. The C runtime
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   240
 *  stricmp() might try to apply a locale/codepage/etc, which we don't want.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   241
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   242
int __PHYSFS_stricmpASCII(const char *s1, const char *s2);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   243
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   244
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   245
 * strnicmp() that guarantees to only work with low ASCII. The C runtime
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   246
 *  strnicmp() might try to apply a locale/codepage/etc, which we don't want.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   247
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   248
int __PHYSFS_strnicmpASCII(const char *s1, const char *s2, PHYSFS_uint32 l);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   249
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   250
/*
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   251
 * Like strdup(), but uses the current PhysicsFS allocator.
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   252
 */
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   253
char *__PHYSFS_strdup(const char *str);
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   254
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   255
/*
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   256
 * Give a hash value for a C string (uses djb's xor hashing algorithm).
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   257
 */
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   258
PHYSFS_uint32 __PHYSFS_hashString(const char *str, size_t len);
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   259
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   260
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   261
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   262
 * The current allocator. Not valid before PHYSFS_init is called!
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   263
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   264
extern PHYSFS_Allocator __PHYSFS_AllocatorHooks;
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   265
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   266
/* convenience macro to make this less cumbersome internally... */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   267
#define allocator __PHYSFS_AllocatorHooks
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   268
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   269
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   270
 * Create a PHYSFS_Io for a file in the physical filesystem.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   271
 *  This path is in platform-dependent notation. (mode) must be 'r', 'w', or
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   272
 *  'a' for Read, Write, or Append.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   273
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   274
PHYSFS_Io *__PHYSFS_createNativeIo(const char *path, const int mode);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   275
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   276
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   277
 * Create a PHYSFS_Io for a buffer of memory (READ-ONLY). If you already
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   278
 *  have one of these, just use its duplicate() method, and it'll increment
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   279
 *  its refcount without allocating a copy of the buffer.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   280
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   281
PHYSFS_Io *__PHYSFS_createMemoryIo(const void *buf, PHYSFS_uint64 len,
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   282
                                   void (*destruct)(void *));
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   283
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   284
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   285
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   286
 * Read (len) bytes from (io) into (buf). Returns non-zero on success,
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   287
 *  zero on i/o error. Literally: "return (io->read(io, buf, len) == len);"
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   288
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   289
int __PHYSFS_readAll(PHYSFS_Io *io, void *buf, const PHYSFS_uint64 len);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   290
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   291
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   292
/* These are shared between some archivers. */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   293
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   294
typedef struct
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   295
{
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   296
    char name[64];
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   297
    PHYSFS_uint32 startPos;
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   298
    PHYSFS_uint32 size;
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   299
} UNPKentry;
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   300
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   301
void UNPK_closeArchive(void *opaque);
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   302
void *UNPK_openArchive(PHYSFS_Io *io,UNPKentry *e,const PHYSFS_uint32 n);
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   303
void UNPK_enumerateFiles(void *opaque, const char *dname,
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   304
                         PHYSFS_EnumFilesCallback cb,
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   305
                         const char *origdir, void *callbackdata);
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   306
PHYSFS_Io *UNPK_openRead(void *opaque, const char *name);
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   307
PHYSFS_Io *UNPK_openWrite(void *opaque, const char *name);
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   308
PHYSFS_Io *UNPK_openAppend(void *opaque, const char *name);
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   309
int UNPK_remove(void *opaque, const char *name);
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   310
int UNPK_mkdir(void *opaque, const char *name);
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   311
int UNPK_stat(void *opaque, const char *fn, PHYSFS_Stat *st);
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   312
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   313
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   314
/*--------------------------------------------------------------------------*/
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   315
/*--------------------------------------------------------------------------*/
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   316
/*------------                                              ----------------*/
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   317
/*------------  You MUST implement the following functions  ----------------*/
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   318
/*------------        if porting to a new platform.         ----------------*/
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   319
/*------------     (see platform/unix.c for an example)     ----------------*/
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   320
/*------------                                              ----------------*/
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   321
/*--------------------------------------------------------------------------*/
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   322
/*--------------------------------------------------------------------------*/
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   323
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   324
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   325
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   326
 * The dir separator; '/' on unix, '\\' on win32, ":" on MacOS, etc...
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   327
 *  Obviously, this isn't a function. If you need more than one char for this,
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   328
 *  you'll need to pull some old pieces of PhysicsFS out of revision control.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   329
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   330
#if PHYSFS_PLATFORM_WINDOWS
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   331
#define __PHYSFS_platformDirSeparator '\\'
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   332
#else
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   333
#define __PHYSFS_platformDirSeparator '/'
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   334
#endif
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   335
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   336
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   337
 * Initialize the platform. This is called when PHYSFS_init() is called from
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   338
 *  the application.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   339
 *
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   340
 * Return zero if there was a catastrophic failure (which prevents you from
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   341
 *  functioning at all), and non-zero otherwise.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   342
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   343
int __PHYSFS_platformInit(void);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   344
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   345
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   346
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   347
 * Deinitialize the platform. This is called when PHYSFS_deinit() is called
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   348
 *  from the application. You can use this to clean up anything you've
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   349
 *  allocated in your platform driver.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   350
 *
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   351
 * Return zero if there was a catastrophic failure (which prevents you from
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   352
 *  functioning at all), and non-zero otherwise.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   353
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   354
int __PHYSFS_platformDeinit(void);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   355
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   356
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   357
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   358
 * Open a file for reading. (filename) is in platform-dependent notation. The
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   359
 *  file pointer should be positioned on the first byte of the file.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   360
 *
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   361
 * The return value will be some platform-specific datatype that is opaque to
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   362
 *  the caller; it could be a (FILE *) under Unix, or a (HANDLE *) under win32.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   363
 *
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   364
 * The same file can be opened for read multiple times, and each should have
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   365
 *  a unique file handle; this is frequently employed to prevent race
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   366
 *  conditions in the archivers.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   367
 *
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   368
 * Call PHYSFS_setErrorCode() and return (NULL) if the file can't be opened.
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   369
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   370
void *__PHYSFS_platformOpenRead(const char *filename);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   371
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   372
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   373
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   374
 * Open a file for writing. (filename) is in platform-dependent notation. If
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   375
 *  the file exists, it should be truncated to zero bytes, and if it doesn't
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   376
 *  exist, it should be created as a zero-byte file. The file pointer should
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   377
 *  be positioned on the first byte of the file.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   378
 *
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   379
 * The return value will be some platform-specific datatype that is opaque to
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   380
 *  the caller; it could be a (FILE *) under Unix, or a (HANDLE *) under win32,
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   381
 *  etc.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   382
 *
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   383
 * Opening a file for write multiple times has undefined results.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   384
 *
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   385
 * Call PHYSFS_setErrorCode() and return (NULL) if the file can't be opened.
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   386
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   387
void *__PHYSFS_platformOpenWrite(const char *filename);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   388
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   389
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   390
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   391
 * Open a file for appending. (filename) is in platform-dependent notation. If
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   392
 *  the file exists, the file pointer should be place just past the end of the
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   393
 *  file, so that the first write will be one byte after the current end of
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   394
 *  the file. If the file doesn't exist, it should be created as a zero-byte
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   395
 *  file. The file pointer should be positioned on the first byte of the file.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   396
 *
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   397
 * The return value will be some platform-specific datatype that is opaque to
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   398
 *  the caller; it could be a (FILE *) under Unix, or a (HANDLE *) under win32,
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   399
 *  etc.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   400
 *
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   401
 * Opening a file for append multiple times has undefined results.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   402
 *
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   403
 * Call PHYSFS_setErrorCode() and return (NULL) if the file can't be opened.
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   404
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   405
void *__PHYSFS_platformOpenAppend(const char *filename);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   406
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   407
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   408
 * Read more data from a platform-specific file handle. (opaque) should be
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   409
 *  cast to whatever data type your platform uses. Read a maximum of (len)
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   410
 *  8-bit bytes to the area pointed to by (buf). If there isn't enough data
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   411
 *  available, return the number of bytes read, and position the file pointer
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   412
 *  immediately after those bytes.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   413
 *  On success, return (len) and position the file pointer immediately past
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   414
 *  the end of the last read byte. Return (-1) if there is a catastrophic
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   415
 *  error, and call PHYSFS_setErrorCode() to describe the problem; the file
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   416
 *  pointer should not move in such a case. A partial read is success; only
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   417
 *  return (-1) on total failure; presumably, the next read call after a
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   418
 *  partial read will fail as such.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   419
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   420
PHYSFS_sint64 __PHYSFS_platformRead(void *opaque, void *buf, PHYSFS_uint64 len);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   421
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   422
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   423
 * Write more data to a platform-specific file handle. (opaque) should be
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   424
 *  cast to whatever data type your platform uses. Write a maximum of (len)
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   425
 *  8-bit bytes from the area pointed to by (buffer). If there is a problem,
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   426
 *  return the number of bytes written, and position the file pointer
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   427
 *  immediately after those bytes. Return (-1) if there is a catastrophic
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   428
 *  error, and call PHYSFS_setErrorCode() to describe the problem; the file
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   429
 *  pointer should not move in such a case. A partial write is success; only
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   430
 *  return (-1) on total failure; presumably, the next write call after a
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   431
 *  partial write will fail as such.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   432
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   433
PHYSFS_sint64 __PHYSFS_platformWrite(void *opaque, const void *buffer,
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   434
                                     PHYSFS_uint64 len);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   435
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   436
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   437
 * Set the file pointer to a new position. (opaque) should be cast to
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   438
 *  whatever data type your platform uses. (pos) specifies the number
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   439
 *  of 8-bit bytes to seek to from the start of the file. Seeking past the
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   440
 *  end of the file is an error condition, and you should check for it.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   441
 *
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   442
 * Not all file types can seek; this is to be expected by the caller.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   443
 *
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   444
 * On error, call PHYSFS_setErrorCode() and return zero. On success, return
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   445
 *  a non-zero value.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   446
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   447
int __PHYSFS_platformSeek(void *opaque, PHYSFS_uint64 pos);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   448
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   449
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   450
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   451
 * Get the file pointer's position, in an 8-bit byte offset from the start of
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   452
 *  the file. (opaque) should be cast to whatever data type your platform
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   453
 *  uses.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   454
 *
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   455
 * Not all file types can "tell"; this is to be expected by the caller.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   456
 *
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   457
 * On error, call PHYSFS_setErrorCode() and return -1. On success, return >= 0.
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   458
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   459
PHYSFS_sint64 __PHYSFS_platformTell(void *opaque);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   460
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   461
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   462
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   463
 * Determine the current size of a file, in 8-bit bytes, from an open file.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   464
 *
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   465
 * The caller expects that this information may not be available for all
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   466
 *  file types on all platforms.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   467
 *
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   468
 * Return -1 if you can't do it, and call PHYSFS_setErrorCode(). Otherwise,
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   469
 *  return the file length in 8-bit bytes.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   470
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   471
PHYSFS_sint64 __PHYSFS_platformFileLength(void *handle);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   472
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   473
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   474
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   475
 * !!! FIXME: comment me.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   476
 */
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   477
int __PHYSFS_platformStat(const char *fn, PHYSFS_Stat *stat);
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   478
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   479
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   480
 * Flush any pending writes to disk. (opaque) should be cast to whatever data
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   481
 *  type your platform uses. Be sure to check for errors; the caller expects
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   482
 *  that this function can fail if there was a flushing error, etc.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   483
 *
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   484
 *  Return zero on failure, non-zero on success.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   485
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   486
int __PHYSFS_platformFlush(void *opaque);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   487
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   488
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   489
 * Close file and deallocate resources. (opaque) should be cast to whatever
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   490
 *  data type your platform uses. This should close the file in any scenario:
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   491
 *  flushing is a separate function call, and this function should never fail.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   492
 *
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   493
 * You should clean up all resources associated with (opaque); the pointer
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   494
 *  will be considered invalid after this call.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   495
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   496
void __PHYSFS_platformClose(void *opaque);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   497
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   498
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   499
 * Platform implementation of PHYSFS_getCdRomDirsCallback()...
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   500
 *  CD directories are discovered and reported to the callback one at a time.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   501
 *  Pointers passed to the callback are assumed to be invalid to the
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   502
 *  application after the callback returns, so you can free them or whatever.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   503
 *  Callback does not assume results will be sorted in any meaningful way.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   504
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   505
void __PHYSFS_platformDetectAvailableCDs(PHYSFS_StringCallback cb, void *data);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   506
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   507
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   508
 * Calculate the base dir, if your platform needs special consideration.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   509
 *  Just return NULL if the standard routines will suffice. (see
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   510
 *  calculateBaseDir() in physfs.c ...)
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   511
 * Your string must end with a dir separator if you don't return NULL.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   512
 *  Caller will allocator.Free() the retval if it's not NULL.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   513
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   514
char *__PHYSFS_platformCalcBaseDir(const char *argv0);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   515
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   516
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   517
 * Get the platform-specific user dir.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   518
 * As of PhysicsFS 2.1, returning NULL means fatal error.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   519
 * Your string must end with a dir separator if you don't return NULL.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   520
 *  Caller will allocator.Free() the retval if it's not NULL.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   521
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   522
char *__PHYSFS_platformCalcUserDir(void);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   523
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   524
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   525
/* This is the cached version from PHYSFS_init(). This is a fast call. */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   526
const char *__PHYSFS_getUserDir(void);  /* not deprecated internal version. */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   527
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   528
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   529
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   530
 * Get the platform-specific pref dir.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   531
 * Returning NULL means fatal error.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   532
 * Your string must end with a dir separator if you don't return NULL.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   533
 *  Caller will allocator.Free() the retval if it's not NULL.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   534
 *  Caller will make missing directories if necessary; this just reports
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   535
 *   the final path.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   536
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   537
char *__PHYSFS_platformCalcPrefDir(const char *org, const char *app);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   538
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   539
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   540
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   541
 * Return a pointer that uniquely identifies the current thread.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   542
 *  On a platform without threading, (0x1) will suffice. These numbers are
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   543
 *  arbitrary; the only requirement is that no two threads have the same
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   544
 *  pointer.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   545
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   546
void *__PHYSFS_platformGetThreadID(void);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   547
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   548
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   549
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   550
 * Enumerate a directory of files. This follows the rules for the
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   551
 *  PHYSFS_Archiver::enumerateFiles() method, except that the
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   552
 *  (dirName) that is passed to this function is converted to
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   553
 *  platform-DEPENDENT notation by the caller. The PHYSFS_Archiver version
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   554
 *  uses platform-independent notation. Note that ".", "..", and other
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   555
 *  meta-entries should always be ignored.
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   556
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   557
void __PHYSFS_platformEnumerateFiles(const char *dirname,
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   558
                                     PHYSFS_EnumFilesCallback callback,
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   559
                                     const char *origdir,
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   560
                                     void *callbackdata);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   561
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   562
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   563
 * Make a directory in the actual filesystem. (path) is specified in
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   564
 *  platform-dependent notation. On error, return zero and set the error
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   565
 *  message. Return non-zero on success.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   566
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   567
int __PHYSFS_platformMkDir(const char *path);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   568
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   569
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   570
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   571
 * Remove a file or directory entry in the actual filesystem. (path) is
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   572
 *  specified in platform-dependent notation. Note that this deletes files
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   573
 *  _and_ directories, so you might need to do some determination.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   574
 *  Non-empty directories should report an error and not delete themselves
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   575
 *  or their contents.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   576
 *
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   577
 * Deleting a symlink should remove the link, not what it points to.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   578
 *
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   579
 * On error, return zero and set the error message. Return non-zero on success.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   580
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   581
int __PHYSFS_platformDelete(const char *path);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   582
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   583
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   584
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   585
 * Create a platform-specific mutex. This can be whatever datatype your
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   586
 *  platform uses for mutexes, but it is cast to a (void *) for abstractness.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   587
 *
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   588
 * Return (NULL) if you couldn't create one. Systems without threads can
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   589
 *  return any arbitrary non-NULL value.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   590
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   591
void *__PHYSFS_platformCreateMutex(void);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   592
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   593
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   594
 * Destroy a platform-specific mutex, and clean up any resources associated
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   595
 *  with it. (mutex) is a value previously returned by
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   596
 *  __PHYSFS_platformCreateMutex(). This can be a no-op on single-threaded
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   597
 *  platforms.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   598
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   599
void __PHYSFS_platformDestroyMutex(void *mutex);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   600
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   601
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   602
 * Grab possession of a platform-specific mutex. Mutexes should be recursive;
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   603
 *  that is, the same thread should be able to call this function multiple
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   604
 *  times in a row without causing a deadlock. This function should block 
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   605
 *  until a thread can gain possession of the mutex.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   606
 *
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   607
 * Return non-zero if the mutex was grabbed, zero if there was an 
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   608
 *  unrecoverable problem grabbing it (this should not be a matter of 
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   609
 *  timing out! We're talking major system errors; block until the mutex 
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   610
 *  is available otherwise.)
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   611
 *
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   612
 * _DO NOT_ call PHYSFS_setErrorCode() in here! Since setErrorCode calls this
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   613
 *  function, you'll cause an infinite recursion. This means you can't
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   614
 *  use the BAIL_*MACRO* macros, either.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   615
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   616
int __PHYSFS_platformGrabMutex(void *mutex);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   617
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   618
/*
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   619
 * Relinquish possession of the mutex when this method has been called 
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   620
 *  once for each time that platformGrabMutex was called. Once possession has
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   621
 *  been released, the next thread in line to grab the mutex (if any) may
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   622
 *  proceed.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   623
 *
12213
bb5522e88ab2 bulk copy of latest physfs to our misc/libphysfs since this seems to fix an off-by-1 error reliably hit in readln read of 1 byte probably introduced in the addition of the buffered read. Whether this is excessive or whether libphysfs should even be maintained by us is another matter. But at least we shouldn't crash
nemo
parents: 10017
diff changeset
   624
 * _DO NOT_ call PHYSFS_setErrorCode() in here! Since setErrorCode calls this
7768
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   625
 *  function, you'll cause an infinite recursion. This means you can't
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   626
 *  use the BAIL_*MACRO* macros, either.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   627
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   628
void __PHYSFS_platformReleaseMutex(void *mutex);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   629
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   630
/*
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   631
 * Called at the start of PHYSFS_init() to prepare the allocator, if the user
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   632
 *  hasn't selected their own allocator via PHYSFS_setAllocator().
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   633
 *  If the platform has a custom allocator, it should fill in the fields of
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   634
 *  (a) with the proper function pointers and return non-zero.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   635
 * If the platform just wants to use malloc()/free()/etc, return zero
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   636
 *  immediately and the higher level will handle it. The Init and Deinit
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   637
 *  fields of (a) are optional...set them to NULL if you don't need them.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   638
 *  Everything else must be implemented. All rules follow those for
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   639
 *  PHYSFS_setAllocator(). If Init isn't NULL, it will be called shortly
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   640
 *  after this function returns non-zero.
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   641
 */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   642
int __PHYSFS_platformSetDefaultAllocator(PHYSFS_Allocator *a);
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   643
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   644
#ifdef __cplusplus
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   645
}
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   646
#endif
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   647
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   648
#endif
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   649
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   650
/* end of physfs_internal.h ... */
13e2037ebc79 Try using PhysicsFS.
unc0rr
parents:
diff changeset
   651