| 3647d72c |
sago007 |
2016-02-12 22:24 |
1 |
#include <streambuf> |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
2 |
#include <string> |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
3 |
#include <string.h> |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
4 |
#include <stdexcept> |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
5 |
#include "physfs.hpp" |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
6 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
7 |
using std::streambuf; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
8 |
using std::ios_base; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
9 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
10 |
namespace PhysFS { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
11 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
12 |
class fbuf : public streambuf { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
13 |
private: |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
14 |
fbuf(const fbuf & other); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
15 |
fbuf& operator=(const fbuf& other); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
16 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
17 |
int_type underflow() { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
18 |
if (PHYSFS_eof(file)) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
19 |
return traits_type::eof(); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
20 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
21 |
size_t bytesRead = PHYSFS_read(file, buffer, 1, bufferSize); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
22 |
if (bytesRead < 1) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
23 |
return traits_type::eof(); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
24 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
25 |
setg(buffer, buffer, buffer + bytesRead); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
26 |
return (unsigned char) *gptr(); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
27 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
28 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
29 |
pos_type seekoff(off_type pos, ios_base::seekdir dir, ios_base::openmode mode) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
30 |
switch (dir) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
31 |
case std::ios_base::beg: |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
32 |
PHYSFS_seek(file, pos); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
33 |
break; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
34 |
case std::ios_base::cur: |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
35 |
// subtract characters currently in buffer from seek position |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
36 |
PHYSFS_seek(file, (PHYSFS_tell(file) + pos) - (egptr() - gptr())); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
37 |
break; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
38 |
case std::ios_base::end: |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
39 |
PHYSFS_seek(file, PHYSFS_fileLength(file) + pos); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
40 |
break; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
41 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
42 |
if (mode & std::ios_base::in) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
43 |
setg(egptr(), egptr(), egptr()); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
44 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
45 |
if (mode & std::ios_base::out) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
46 |
setp(buffer, buffer); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
47 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
48 |
return PHYSFS_tell(file); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
49 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
50 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
51 |
pos_type seekpos(pos_type pos, std::ios_base::openmode mode) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
52 |
PHYSFS_seek(file, pos); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
53 |
if (mode & std::ios_base::in) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
54 |
setg(egptr(), egptr(), egptr()); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
55 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
56 |
if (mode & std::ios_base::out) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
57 |
setp(buffer, buffer); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
58 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
59 |
return PHYSFS_tell(file); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
60 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
61 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
62 |
int_type overflow( int_type c = traits_type::eof() ) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
63 |
if (pptr() == pbase() && c == traits_type::eof()) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
64 |
return 0; // no-op |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
65 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
66 |
if (PHYSFS_write(file, pbase(), pptr() - pbase(), 1) < 1) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
67 |
return traits_type::eof(); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
68 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
69 |
if (c != traits_type::eof()) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
70 |
if (PHYSFS_write(file, &c, 1, 1) < 1) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
71 |
return traits_type::eof(); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
72 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
73 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
74 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
75 |
return 0; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
76 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
77 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
78 |
int sync() { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
79 |
return overflow(); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
80 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
81 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
82 |
char * buffer; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
83 |
size_t const bufferSize; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
84 |
protected: |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
85 |
PHYSFS_File * const file; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
86 |
public: |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
87 |
fbuf(PHYSFS_File * file, std::size_t bufferSize = 2048) : file(file), bufferSize(bufferSize) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
88 |
buffer = new char[bufferSize]; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
89 |
char * end = buffer + bufferSize; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
90 |
setg(end, end, end); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
91 |
setp(buffer, end); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
92 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
93 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
94 |
~fbuf() { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
95 |
sync(); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
96 |
delete [] buffer; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
97 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
98 |
}; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
99 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
100 |
base_fstream::base_fstream(PHYSFS_File* file) : file(file) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
101 |
if (file == NULL) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
102 |
throw std::invalid_argument("attempted to construct fstream with NULL ptr"); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
103 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
104 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
105 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
106 |
base_fstream::~base_fstream() { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
107 |
PHYSFS_close(file); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
108 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
109 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
110 |
PhysFS::size_t base_fstream::length() { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
111 |
return PHYSFS_fileLength(file); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
112 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
113 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
114 |
PHYSFS_File* openWithMode(char const * filename, mode openMode) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
115 |
PHYSFS_File* file = NULL; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
116 |
switch (openMode) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
117 |
case WRITE: |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
118 |
file = PHYSFS_openWrite(filename); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
119 |
break; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
120 |
case APPEND: |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
121 |
file = PHYSFS_openAppend(filename); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
122 |
break; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
123 |
case READ: |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
124 |
file = PHYSFS_openRead(filename); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
125 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
126 |
if (file == NULL) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
127 |
throw std::invalid_argument("file not found: " + std::string(filename)); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
128 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
129 |
return file; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
130 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
131 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
132 |
ifstream::ifstream(const string& filename) |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
133 |
: base_fstream(openWithMode(filename.c_str(), READ)), std::istream(new fbuf(file)) {} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
134 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
135 |
ifstream::~ifstream() { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
136 |
delete rdbuf(); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
137 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
138 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
139 |
ofstream::ofstream(const string& filename, mode writeMode) |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
140 |
: base_fstream(openWithMode(filename.c_str(), writeMode)), std::ostream(new fbuf(file)) {} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
141 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
142 |
ofstream::~ofstream() { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
143 |
delete rdbuf(); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
144 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
145 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
146 |
fstream::fstream(const string& filename, mode openMode) |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
147 |
: base_fstream(openWithMode(filename.c_str(), openMode)), std::iostream(new fbuf(file)) {} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
148 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
149 |
fstream::~fstream() { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
150 |
delete rdbuf(); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
151 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
152 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
153 |
Version getLinkedVersion() { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
154 |
Version version; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
155 |
PHYSFS_getLinkedVersion(&version); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
156 |
return version; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
157 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
158 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
159 |
void init(const char* argv0) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
160 |
PHYSFS_init(argv0); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
161 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
162 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
163 |
void deinit() { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
164 |
PHYSFS_deinit(); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
165 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
166 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
167 |
ArchiveInfoList supportedArchiveTypes() { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
168 |
ArchiveInfoList list; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
169 |
for (const ArchiveInfo** archiveType = PHYSFS_supportedArchiveTypes(); *archiveType != NULL; archiveType++) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
170 |
list.push_back(**archiveType); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
171 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
172 |
return list; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
173 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
174 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
175 |
string getDirSeparator() { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
176 |
return PHYSFS_getDirSeparator(); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
177 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
178 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
179 |
void permitSymbolicLinks(bool allow) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
180 |
PHYSFS_permitSymbolicLinks(allow); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
181 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
182 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
183 |
StringList getCdRomDirs() { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
184 |
StringList dirs; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
185 |
char ** dirBegin = PHYSFS_getCdRomDirs(); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
186 |
for (char ** dir = dirBegin; *dir != NULL; dir++) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
187 |
dirs.push_back(*dir); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
188 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
189 |
PHYSFS_freeList(dirBegin); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
190 |
return dirs; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
191 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
192 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
193 |
void getCdRomDirs(StringCallback callback, void * extra) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
194 |
PHYSFS_getCdRomDirsCallback(callback, extra); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
195 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
196 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
197 |
string getBaseDir() { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
198 |
return PHYSFS_getBaseDir(); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
199 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
200 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
201 |
string getUserDir() { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
202 |
return PHYSFS_getUserDir(); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
203 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
204 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
205 |
string getWriteDir() { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
206 |
return PHYSFS_getWriteDir(); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
207 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
208 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
209 |
void setWriteDir(const string& newDir) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
210 |
PHYSFS_setWriteDir(newDir.c_str()); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
211 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
212 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
213 |
void removeFromSearchPath(const string& oldDir) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
214 |
PHYSFS_removeFromSearchPath(oldDir.c_str()); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
215 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
216 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
217 |
StringList getSearchPath() { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
218 |
StringList pathList; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
219 |
char ** pathBegin = PHYSFS_getSearchPath(); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
220 |
for (char ** path = pathBegin; *path != NULL; path++) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
221 |
pathList.push_back(*path); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
222 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
223 |
PHYSFS_freeList(pathBegin); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
224 |
return pathList; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
225 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
226 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
227 |
void getSearchPath(StringCallback callback, void * extra) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
228 |
PHYSFS_getSearchPathCallback(callback, extra); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
229 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
230 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
231 |
void setSaneConfig(const string& orgName, const string& appName, |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
232 |
const string& archiveExt, bool includeCdRoms, bool archivesFirst) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
233 |
PHYSFS_setSaneConfig(orgName.c_str(), appName.c_str(), archiveExt.c_str(), includeCdRoms, archivesFirst); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
234 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
235 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
236 |
void mkdir(const string& dirName) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
237 |
PHYSFS_mkdir(dirName.c_str()); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
238 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
239 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
240 |
void deleteFile(const string& filename) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
241 |
PHYSFS_delete(filename.c_str()); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
242 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
243 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
244 |
string getRealDir(const string& filename) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
245 |
return PHYSFS_getRealDir(filename.c_str()); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
246 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
247 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
248 |
StringList enumerateFiles(const string& directory) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
249 |
StringList files; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
250 |
char ** listBegin = PHYSFS_enumerateFiles(directory.c_str()); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
251 |
for (char ** file = listBegin; *file != NULL; file++) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
252 |
files.push_back(*file); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
253 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
254 |
PHYSFS_freeList(listBegin); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
255 |
return files; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
256 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
257 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
258 |
void enumerateFiles(const string& directory, EnumFilesCallback callback, void * extra) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
259 |
PHYSFS_enumerateFilesCallback(directory.c_str(), callback, extra); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
260 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
261 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
262 |
bool exists(const string& filename) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
263 |
return PHYSFS_exists(filename.c_str()); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
264 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
265 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
266 |
bool isDirectory(const string& filename) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
267 |
return PHYSFS_isDirectory(filename.c_str()); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
268 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
269 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
270 |
bool isSymbolicLink(const string& filename) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
271 |
return PHYSFS_isSymbolicLink(filename.c_str()); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
272 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
273 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
274 |
sint64 getLastModTime(const string& filename) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
275 |
return PHYSFS_getLastModTime(filename.c_str()); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
276 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
277 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
278 |
bool isInit() { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
279 |
return PHYSFS_isInit(); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
280 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
281 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
282 |
bool symbolicLinksPermitted() { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
283 |
return PHYSFS_symbolicLinksPermitted(); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
284 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
285 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
286 |
void setAllocator(const Allocator* allocator) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
287 |
PHYSFS_setAllocator(allocator); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
288 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
289 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
290 |
void mount(const string& newDir, const string& mountPoint, bool appendToPath) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
291 |
PHYSFS_mount(newDir.c_str(), mountPoint.c_str(), appendToPath); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
292 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
293 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
294 |
string getMountPoint(const string& dir) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
295 |
return PHYSFS_getMountPoint(dir.c_str()); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
296 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
297 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
298 |
sint16 Util::swapSLE16(sint16 value) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
299 |
return PHYSFS_swapSLE16(value); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
300 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
301 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
302 |
uint16 Util::swapULE16(uint16 value) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
303 |
return PHYSFS_swapULE16(value); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
304 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
305 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
306 |
sint32 Util::swapSLE32(sint32 value) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
307 |
return PHYSFS_swapSLE32(value); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
308 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
309 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
310 |
uint32 Util::swapULE32(uint32 value) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
311 |
return PHYSFS_swapULE32(value); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
312 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
313 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
314 |
sint64 Util::swapSLE64(sint64 value) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
315 |
return PHYSFS_swapSLE64(value); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
316 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
317 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
318 |
uint64 Util::swapULE64(uint64 value) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
319 |
return PHYSFS_swapULE64(value); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
320 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
321 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
322 |
sint16 Util::swapSBE16(sint16 value) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
323 |
return PHYSFS_swapSBE16(value); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
324 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
325 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
326 |
uint16 Util::swapUBE16(uint16 value) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
327 |
return PHYSFS_swapUBE16(value); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
328 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
329 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
330 |
sint32 Util::swapSBE32(sint32 value) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
331 |
return PHYSFS_swapSBE32(value); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
332 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
333 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
334 |
uint32 Util::swapUBE32(uint32 value) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
335 |
return PHYSFS_swapUBE32(value); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
336 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
337 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
338 |
sint64 Util::swapSBE64(sint64 value) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
339 |
return PHYSFS_swapSBE64(value); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
340 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
341 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
342 |
uint64 Util::swapUBE64(uint64 value) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
343 |
return PHYSFS_swapUBE64(value); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
344 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
345 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
346 |
string Util::utf8FromUcs4(const uint32* src) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
347 |
string value; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
348 |
std::size_t length = strlen((char*) src); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
349 |
char * buffer = new char[length]; // will be smaller than len |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
350 |
PHYSFS_utf8FromUcs4(src, buffer, length); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
351 |
value.append(buffer); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
352 |
return value; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
353 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
354 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
355 |
string Util::utf8ToUcs4(const char* src) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
356 |
string value; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
357 |
std::size_t length = strlen(src) * 4; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
358 |
char * buffer = new char[length]; // will be smaller than len |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
359 |
PHYSFS_utf8ToUcs4(src, (uint32*) buffer, length); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
360 |
value.append(buffer); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
361 |
return value; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
362 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
363 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
364 |
string Util::utf8FromUcs2(const uint16* src) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
365 |
string value; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
366 |
std::size_t length = strlen((char*) src); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
367 |
char * buffer = new char[length]; // will be smaller than len |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
368 |
PHYSFS_utf8FromUcs2(src, buffer, length); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
369 |
value.append(buffer); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
370 |
return value; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
371 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
372 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
373 |
string Util::utf8ToUcs2(const char* src) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
374 |
string value; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
375 |
std::size_t length = strlen(src) * 2; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
376 |
char * buffer = new char[length]; // will be smaller than len |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
377 |
PHYSFS_utf8ToUcs2(src, (uint16*) buffer, length); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
378 |
value.append(buffer); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
379 |
return value; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
380 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
381 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
382 |
string Util::utf8FromLatin1(const char* src) { |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
383 |
string value; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
384 |
std::size_t length = strlen((char*) src) * 2; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
385 |
char * buffer = new char[length]; // will be smaller than len |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
386 |
PHYSFS_utf8FromLatin1(src, buffer, length); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
387 |
value.append(buffer); |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
388 |
return value; |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
389 |
} |
| 3647d72c |
sago007 |
2016-02-12 22:24 |
390 |
|
| 3647d72c |
sago007 |
2016-02-12 22:24 |
391 |
} |
|
|
1970-01-01 00:00 |
392 |
|