author | Ryan C. Gordon <icculus@icculus.org> |
Sat, 07 Jul 2001 03:52:43 +0000 | |
changeset 15 | 418eacc97ac8 |
parent 12 | a4041c91d715 |
child 19 | a0279b57398c |
permissions | -rw-r--r-- |
9 | 1 |
/* |
2 |
* Internal function/structure declaration. Do NOT include in your |
|
3 |
* application. |
|
4 |
* |
|
5 |
* Please see the file LICENSE in the source's root directory. |
|
6 |
* |
|
7 |
* This file written by Ryan C. Gordon. |
|
8 |
*/ |
|
9 |
||
10 |
#ifndef _INCLUDE_PHYSFS_INTERNAL_H_ |
|
11 |
#define _INCLUDE_PHYSFS_INTERNAL_H_ |
|
12 |
||
13 |
#ifndef __PHYSICSFS_INTERNAL__ |
|
14 |
#error Do not include this header from your applications. |
|
15 |
#endif |
|
16 |
||
15
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
17 |
struct __PHYSFS_DIRHANDLE__; |
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
18 |
struct __PHYSFS_FILEFUNCTIONS__; |
9 | 19 |
|
20 |
typedef struct __PHYSFS_FILEHANDLE__ |
|
21 |
{ |
|
22 |
/* |
|
23 |
* This is reserved for the driver to store information. |
|
24 |
*/ |
|
25 |
void *opaque; |
|
26 |
||
27 |
/* |
|
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
28 |
* This should be the DirHandle that created this FileHandle. |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
29 |
*/ |
15
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
30 |
const struct __PHYSFS_DIRHANDLE__ *dirHandle; |
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
31 |
|
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
32 |
/* |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
33 |
* Pointer to the file i/o functions for this filehandle. |
9 | 34 |
*/ |
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
35 |
const struct __PHYSFS_FILEFUNCTIONS__ *funcs; |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
36 |
} FileHandle; |
9 | 37 |
|
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
38 |
|
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
39 |
typedef struct __PHYSFS_FILEFUNCTIONS__ |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
40 |
{ |
9 | 41 |
/* |
42 |
* Read more from the file. |
|
15
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
43 |
* Returns number of objects of (objSize) bytes read from file, -1 |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
44 |
* if complete failure. |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
45 |
* On failure, call __PHYSFS_setError(). |
9 | 46 |
*/ |
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
47 |
int (*read)(FileHandle *handle, void *buffer, |
9 | 48 |
unsigned int objSize, unsigned int objCount); |
49 |
||
50 |
/* |
|
51 |
* Write more to the file. Archives don't have to implement this. |
|
52 |
* (Set it to NULL if not implemented). |
|
15
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
53 |
* Returns number of objects of (objSize) bytes written to file, -1 |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
54 |
* if complete failure. |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
55 |
* On failure, call __PHYSFS_setError(). |
9 | 56 |
*/ |
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
57 |
int (*write)(FileHandle *handle, void *buffer, |
9 | 58 |
unsigned int objSize, unsigned int objCount); |
59 |
||
60 |
/* |
|
61 |
* Returns non-zero if at end of file. |
|
62 |
*/ |
|
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
63 |
int (*eof)(FileHandle *handle); |
9 | 64 |
|
65 |
/* |
|
66 |
* Returns byte offset from start of file. |
|
67 |
*/ |
|
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
68 |
int (*tell)(FileHandle *handle); |
9 | 69 |
|
70 |
/* |
|
71 |
* Move read/write pointer to byte offset from start of file. |
|
72 |
* Returns non-zero on success, zero on error. |
|
15
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
73 |
* On failure, call __PHYSFS_setError(). |
9 | 74 |
*/ |
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
75 |
int (*seek)(FileHandle *handle, int offset); |
9 | 76 |
|
77 |
/* |
|
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
78 |
* Close the file, and free the FileHandle structure (including "opaque"). |
15
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
79 |
* returns non-zero on success, zero if can't close file. |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
80 |
* On failure, call __PHYSFS_setError(). |
9 | 81 |
*/ |
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
82 |
int (*close)(FileHandle *handle); |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
83 |
} FileFunctions; |
9 | 84 |
|
85 |
||
15
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
86 |
typedef struct __PHYSFS_DIRHANDLE__ |
9 | 87 |
{ |
88 |
/* |
|
89 |
* This is reserved for the driver to store information. |
|
90 |
*/ |
|
91 |
void *opaque; |
|
92 |
||
93 |
/* |
|
15
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
94 |
* Pointer to the directory i/o functions for this handle. |
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
95 |
*/ |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
96 |
const struct __PHYSFS_DIRFUNCTIONS__ *funcs; |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
97 |
} DirHandle; |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
98 |
|
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
99 |
|
12
a4041c91d715
Redesign of enumerateFiles code. More efficient and clean, less memory
Ryan C. Gordon <icculus@icculus.org>
parents:
11
diff
changeset
|
100 |
typedef struct __PHYSFS_LINKEDSTRINGLIST__ |
a4041c91d715
Redesign of enumerateFiles code. More efficient and clean, less memory
Ryan C. Gordon <icculus@icculus.org>
parents:
11
diff
changeset
|
101 |
{ |
a4041c91d715
Redesign of enumerateFiles code. More efficient and clean, less memory
Ryan C. Gordon <icculus@icculus.org>
parents:
11
diff
changeset
|
102 |
char *str; |
a4041c91d715
Redesign of enumerateFiles code. More efficient and clean, less memory
Ryan C. Gordon <icculus@icculus.org>
parents:
11
diff
changeset
|
103 |
struct __PHYSFS_LINKEDSTRINGLIST__ *next; |
a4041c91d715
Redesign of enumerateFiles code. More efficient and clean, less memory
Ryan C. Gordon <icculus@icculus.org>
parents:
11
diff
changeset
|
104 |
} LinkedStringList; |
a4041c91d715
Redesign of enumerateFiles code. More efficient and clean, less memory
Ryan C. Gordon <icculus@icculus.org>
parents:
11
diff
changeset
|
105 |
|
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
106 |
/* |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
107 |
* Symlinks should always be followed; PhysicsFS will use |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
108 |
* DirFunctions->isSymLink() and make a judgement on whether to |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
109 |
* continue to call other methods based on that. |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
110 |
*/ |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
111 |
typedef struct __PHYSFS_DIRFUNCTIONS__ |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
112 |
{ |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
113 |
/* |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
114 |
* Returns non-zero if (filename) is a valid archive that this |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
115 |
* driver can handle. This filename is in platform-dependent |
15
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
116 |
* notation. forWriting is non-zero if this is to be used for |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
117 |
* the write directory, and zero if this is to be used for an |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
118 |
* element of the search path. |
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
119 |
*/ |
15
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
120 |
int (*isArchive)(const char *filename, int forWriting); |
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
121 |
|
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
122 |
/* |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
123 |
* Return a DirHandle for dir/archive (name). |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
124 |
* This filename is in platform-dependent notation. |
15
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
125 |
* forWriting is non-zero if this is to be used for |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
126 |
* the write directory, and zero if this is to be used for an |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
127 |
* element of the search path. |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
128 |
* Returns NULL on failure, and calls __PHYSFS_setError(). |
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
129 |
*/ |
15
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
130 |
DirHandle *(*openArchive)(const char *name, int forWriting); |
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
131 |
|
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
132 |
/* |
12
a4041c91d715
Redesign of enumerateFiles code. More efficient and clean, less memory
Ryan C. Gordon <icculus@icculus.org>
parents:
11
diff
changeset
|
133 |
* Returns a list of all files in dirname. Each element of this list |
a4041c91d715
Redesign of enumerateFiles code. More efficient and clean, less memory
Ryan C. Gordon <icculus@icculus.org>
parents:
11
diff
changeset
|
134 |
* (and its "str" field) will be deallocated with the system's free() |
a4041c91d715
Redesign of enumerateFiles code. More efficient and clean, less memory
Ryan C. Gordon <icculus@icculus.org>
parents:
11
diff
changeset
|
135 |
* function by the caller, so be sure to explicitly malloc() each |
a4041c91d715
Redesign of enumerateFiles code. More efficient and clean, less memory
Ryan C. Gordon <icculus@icculus.org>
parents:
11
diff
changeset
|
136 |
* chunk. |
a4041c91d715
Redesign of enumerateFiles code. More efficient and clean, less memory
Ryan C. Gordon <icculus@icculus.org>
parents:
11
diff
changeset
|
137 |
* If you have a memory failure, return as much as you can. |
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
138 |
* This dirname is in platform-independent notation. |
9 | 139 |
*/ |
15
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
140 |
LinkedStringList *(*enumerateFiles)(DirHandle *r, const char *dirname); |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
141 |
|
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
142 |
/* |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
143 |
* Returns non-zero if filename can be opened for reading. |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
144 |
* This filename is in platform-independent notation. |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
145 |
*/ |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
146 |
int (*exists)(DirHandle *r, const char *name); |
9 | 147 |
|
148 |
/* |
|
149 |
* Returns non-zero if filename is really a directory. |
|
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
150 |
* This filename is in platform-independent notation. |
9 | 151 |
*/ |
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
152 |
int (*isDirectory)(DirHandle *r, const char *name); |
9 | 153 |
|
154 |
/* |
|
155 |
* Returns non-zero if filename is really a symlink. |
|
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
156 |
* This filename is in platform-independent notation. |
9 | 157 |
*/ |
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
158 |
int (*isSymLink)(DirHandle *r, const char *name); |
9 | 159 |
|
160 |
/* |
|
161 |
* Open file for reading, and return a FileHandle. |
|
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
162 |
* This filename is in platform-independent notation. |
15
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
163 |
* If you can't handle multiple opens of the same file, |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
164 |
* you can opt to fail for the second call. |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
165 |
* Returns NULL on failure, and calls __PHYSFS_setError(). |
9 | 166 |
*/ |
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
167 |
FileHandle *(*openRead)(DirHandle *r, const char *filename); |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
168 |
|
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
169 |
/* |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
170 |
* Open file for writing, and return a FileHandle. |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
171 |
* This filename is in platform-independent notation. |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
172 |
* This method may be NULL. |
15
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
173 |
* If you can't handle multiple opens of the same file, |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
174 |
* you can opt to fail for the second call. |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
175 |
* Returns NULL on failure, and calls __PHYSFS_setError(). |
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
176 |
*/ |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
177 |
FileHandle *(*openWrite)(DirHandle *r, const char *filename); |
9 | 178 |
|
179 |
/* |
|
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
180 |
* Open file for appending, and return a FileHandle. |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
181 |
* This filename is in platform-independent notation. |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
182 |
* This method may be NULL. |
15
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
183 |
* If you can't handle multiple opens of the same file, |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
184 |
* you can opt to fail for the second call. |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
185 |
* Returns NULL on failure, and calls __PHYSFS_setError(). |
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
186 |
*/ |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
187 |
FileHandle *(*openAppend)(DirHandle *r, const char *filename); |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
188 |
|
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
189 |
/* |
15
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
190 |
* Delete a file in the archive/directory. |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
191 |
* Return non-zero on success, zero on failure. |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
192 |
* This filename is in platform-independent notation. |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
193 |
* This method may be NULL. |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
194 |
* On failure, call __PHYSFS_setError(). |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
195 |
*/ |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
196 |
int (*remove)(DirHandle *r, const char *filename); |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
197 |
|
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
198 |
/* |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
199 |
* Create a directory in the archive/directory. |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
200 |
* If the application is trying to make multiple dirs, PhysicsFS |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
201 |
* will split them up into multiple calls before passing them to |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
202 |
* your driver. |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
203 |
* Return non-zero on success, zero on failure. |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
204 |
* This filename is in platform-independent notation. |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
205 |
* This method may be NULL. |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
206 |
* On failure, call __PHYSFS_setError(). |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
207 |
*/ |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
208 |
int (*mkdir)(DirHandle *r, const char *filename); |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
209 |
|
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
210 |
/* |
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
211 |
* Close directories/archives, and free the handle, including |
9 | 212 |
* the "opaque" entry. This should assume that it won't be called if |
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
213 |
* there are still files open from this DirHandle. |
9 | 214 |
*/ |
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
215 |
void (*close)(DirHandle *r); |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
216 |
} DirFunctions; |
9 | 217 |
|
218 |
||
219 |
/* error messages... */ |
|
220 |
#define ERR_IS_INITIALIZED "Already initialized" |
|
221 |
#define ERR_NOT_INITIALIZED "Not initialized" |
|
222 |
#define ERR_INVALID_ARGUMENT "Invalid argument" |
|
15
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
223 |
#define ERR_FILES_STILL_OPEN "Files still open" |
9 | 224 |
#define ERR_NO_DIR_CREATE "Failed to create directories" |
225 |
#define ERR_OUT_OF_MEMORY "Out of memory" |
|
226 |
#define ERR_NOT_IN_SEARCH_PATH "No such entry in search path" |
|
227 |
#define ERR_NOT_SUPPORTED "Operation not supported" |
|
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
228 |
#define ERR_UNSUPPORTED_ARCHIVE "Archive type unsupported" |
15
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
229 |
#define ERR_NOT_A_HANDLE "Not a file handle" |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
230 |
#define ERR_INSECURE_FNAME "Insecure filename" |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
231 |
#define ERR_SYMLINK_DISALLOWED "Symbolic links are disabled" |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
232 |
#define ERR_NO_WRITE_DIR "Write directory is not set" |
9 | 233 |
|
234 |
||
235 |
/* |
|
236 |
* Call this to set the message returned by PHYSFS_getLastError(). |
|
237 |
* Please only use the ERR_* constants above, or add new constants to the |
|
238 |
* above group, but I want these all in one place. |
|
15
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
239 |
* |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
240 |
* Calling this with a NULL argument is a safe no-op. |
9 | 241 |
*/ |
242 |
void __PHYSFS_setError(const char *err); |
|
243 |
||
244 |
||
15
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
245 |
/* |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
246 |
* Convert (dirName) to platform-dependent notation, then prepend (prepend) |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
247 |
* and append (append) to the converted string. |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
248 |
* |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
249 |
* So, on Win32, calling: |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
250 |
* __PHYSFS_convertToDependentNotation("C:\", "my/files", NULL); |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
251 |
* ...will return the string "C:\my\files". |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
252 |
* |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
253 |
* This is a convenience function; you might want to hack something out that |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
254 |
* is less generic (and therefore more efficient). |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
255 |
* |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
256 |
* Be sure to free() the return value when done with it. |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
257 |
*/ |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
258 |
char *__PHYSFS_convertToDependentNotation(const char *prepend, |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
259 |
const char *dirName, |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
260 |
const char *append); |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
261 |
|
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
262 |
/* |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
263 |
* Verify that (fname) (in platform-independent notation), in relation |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
264 |
* to (h) is secure. That means that each element of fname is checked |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
265 |
* for symlinks (if they aren't permitted). Also, elements such as |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
266 |
* ".", "..", or ":" are flagged. |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
267 |
* |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
268 |
* Returns non-zero if string is safe, zero if there's a security issue. |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
269 |
* PHYSFS_getLastError() will specify what was wrong. |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
270 |
*/ |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
271 |
int __PHYSFS_verifySecurity(DirHandle *h, const char *fname); |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
272 |
|
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
273 |
|
9 | 274 |
/* This gets used all over for lessening code clutter. */ |
15
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
275 |
#define BAIL_IF_MACRO(c, e, r) if (c) { __PHYSFS_setError(e); return r; } |
9 | 276 |
|
277 |
||
278 |
||
279 |
||
280 |
/*--------------------------------------------------------------------------*/ |
|
281 |
/*--------------------------------------------------------------------------*/ |
|
282 |
/*------------ ----------------*/ |
|
283 |
/*------------ You MUST implement the following functions ----------------*/ |
|
284 |
/*------------ if porting to a new platform. ----------------*/ |
|
285 |
/*------------ (see unix.c for an example) ----------------*/ |
|
286 |
/*------------ ----------------*/ |
|
287 |
/*--------------------------------------------------------------------------*/ |
|
288 |
/*--------------------------------------------------------------------------*/ |
|
289 |
||
290 |
||
291 |
/* |
|
292 |
* The dir separator; "/" on unix, "\\" on win32, ":" on MacOS, etc... |
|
293 |
* Obviously, this isn't a function, but it IS a null-terminated string. |
|
294 |
*/ |
|
15
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
295 |
extern const char *__PHYSFS_platformDirSeparator; |
9 | 296 |
|
297 |
/* |
|
298 |
* Platform implementation of PHYSFS_getCdRomDirs()... |
|
299 |
* See physfs.h. The retval should be freeable via PHYSFS_freeList(). |
|
300 |
*/ |
|
301 |
char **__PHYSFS_platformDetectAvailableCDs(void); |
|
302 |
||
303 |
/* |
|
304 |
* Calculate the base dir, if your platform needs special consideration. |
|
305 |
* Just return NULL if the standard routines will suffice. (see |
|
306 |
* calculateBaseDir() in physfs.c ...) |
|
307 |
* Caller will free() the retval if it's not NULL. |
|
308 |
*/ |
|
309 |
char *__PHYSFS_platformCalcBaseDir(char *argv0); |
|
310 |
||
311 |
/* |
|
312 |
* Get the platform-specific user name. |
|
313 |
* Caller will free() the retval if it's not NULL. If it's NULL, the username |
|
314 |
* will default to "default". |
|
315 |
*/ |
|
316 |
char *__PHYSFS_platformGetUserName(void); |
|
317 |
||
318 |
/* |
|
319 |
* Get the platform-specific user dir. |
|
320 |
* Caller will free() the retval if it's not NULL. If it's NULL, the userdir |
|
321 |
* will default to basedir/username. |
|
322 |
*/ |
|
323 |
char *__PHYSFS_platformGetUserDir(void); |
|
324 |
||
325 |
/* |
|
326 |
* Return a number that uniquely identifies the current thread. |
|
327 |
* On a platform without threading, (1) will suffice. These numbers are |
|
328 |
* arbitrary; the only requirement is that no two threads have the same |
|
329 |
* number. |
|
330 |
*/ |
|
331 |
int __PHYSFS_platformGetThreadID(void); |
|
332 |
||
333 |
/* |
|
334 |
* This is a pass-through to whatever stricmp() is called on your platform. |
|
335 |
*/ |
|
336 |
int __PHYSFS_platformStricmp(const char *str1, const char *str2); |
|
337 |
||
11
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
338 |
/* |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
339 |
* Return non-zero if filename (in platform-dependent notation) is a symlink. |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
340 |
*/ |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
341 |
int __PHYSFS_platformIsSymlink(const char *fname); |
677e01f5109e
Progress toward complete implementation continues...
Ryan C. Gordon <icculus@icculus.org>
parents:
9
diff
changeset
|
342 |
|
15
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
343 |
/* |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
344 |
* Return non-zero if filename (in platform-dependent notation) is a symlink. |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
345 |
*/ |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
346 |
int __PHYSFS_platformIsDirectory(const char *fname); |
418eacc97ac8
Tons of updates. Mostly implemented. Mostly compiling.
Ryan C. Gordon <icculus@icculus.org>
parents:
12
diff
changeset
|
347 |
|
9 | 348 |
|
349 |
#ifdef __cplusplus |
|
350 |
extern "C" { |
|
351 |
#endif |
|
352 |
||
353 |
#endif |
|
354 |
||
355 |
/* end of physfs_internal.h ... */ |
|
356 |