Skip to content

Commit dd3cc46

Browse files
Use Qt's QFile abstraction for the Platform.h file I/O functions
1 parent a4d41fa commit dd3cc46

1 file changed

Lines changed: 33 additions & 49 deletions

File tree

src/frontend/qt_sdl/Platform.cpp

Lines changed: 33 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,6 @@
4141
#include "MPInterface.h"
4242
#include "SPI_Firmware.h"
4343

44-
#ifdef __WIN32__
45-
#include <io.h>
46-
#define fdopen _fdopen
47-
#define fseek _fseeki64
48-
#define ftell _ftelli64
49-
#define dup _dup
50-
#endif // __WIN32__
51-
5244
extern CameraManager* camManager[2];
5345

5446
extern melonDS::Net net;
@@ -135,20 +127,15 @@ FileHandle* OpenFile(const std::string& path, FileMode mode)
135127
}
136128

137129
QString qpath{QString::fromStdString(path)};
130+
QFile* qfile = new QFile(qpath);
138131

139-
std::string modeString = GetModeString(mode, QFile::exists(qpath));
140132
QIODevice::OpenMode qmode = GetQMode(mode);
141-
QFile qfile{qpath};
142-
if (qfile.open(qmode))
143-
{
144-
FILE* file = fdopen(dup(qfile.handle()), modeString.c_str());
145-
qfile.close();
133+
std::string modeString = GetModeString(mode, QFile::exists(qpath));
146134

147-
if (file)
148-
{
149-
Log(LogLevel::Debug, "Opened \"%s\" with FileMode 0x%x (effective mode \"%s\")\n", path.c_str(), mode, modeString.c_str());
150-
return reinterpret_cast<FileHandle *>(file);
151-
}
135+
if (qfile->open(qmode))
136+
{
137+
Log(LogLevel::Debug, "Opened \"%s\" with FileMode 0x%x (effective mode \"%s\")\n", path.c_str(), mode, modeString.c_str());
138+
return reinterpret_cast<FileHandle *>(qfile);
152139
}
153140
Log(LogLevel::Warn, "Failed to open \"%s\" with FileMode 0x%x (effective mode \"%s\")\n", path.c_str(), mode, modeString.c_str());
154141
return nullptr;
@@ -180,33 +167,30 @@ FileHandle* OpenLocalFile(const std::string& path, FileMode mode)
180167

181168
bool CloseFile(FileHandle* file)
182169
{
183-
return fclose(reinterpret_cast<FILE *>(file)) == 0;
170+
QFile* qfile = reinterpret_cast<QFile*>(file);
171+
qfile->close();
172+
delete qfile;
173+
return true;
184174
}
185175

186176
bool IsEndOfFile(FileHandle* file)
187177
{
188-
return feof(reinterpret_cast<FILE *>(file)) != 0;
178+
return reinterpret_cast<QFile*>(file)->atEnd();
189179
}
190180

191181
bool FileReadLine(char* str, int count, FileHandle* file)
192182
{
193-
return fgets(str, count, reinterpret_cast<FILE *>(file)) != nullptr;
183+
return reinterpret_cast<QFile*>(file)->readLine(str, count);
194184
}
195185

196186
bool FileExists(const std::string& name)
197187
{
198-
FileHandle* f = OpenFile(name, FileMode::Read);
199-
if (!f) return false;
200-
CloseFile(f);
201-
return true;
188+
return QFile::exists(QString::fromStdString(name));
202189
}
203190

204191
bool LocalFileExists(const std::string& name)
205192
{
206-
FileHandle* f = OpenLocalFile(name, FileMode::Read);
207-
if (!f) return false;
208-
CloseFile(f);
209-
return true;
193+
return QFile::exists(QString::fromStdString(GetLocalFilePath(name)));
210194
}
211195

212196
bool CheckFileWritable(const std::string& filepath)
@@ -249,40 +233,45 @@ bool CheckLocalFileWritable(const std::string& name)
249233

250234
bool FileSeek(FileHandle* file, s64 offset, FileSeekOrigin origin)
251235
{
252-
int stdorigin;
253-
switch (origin)
254-
{
255-
case FileSeekOrigin::Start: stdorigin = SEEK_SET; break;
256-
case FileSeekOrigin::Current: stdorigin = SEEK_CUR; break;
257-
case FileSeekOrigin::End: stdorigin = SEEK_END; break;
258-
}
236+
QFile* qfile = reinterpret_cast<QFile*>(file);
237+
238+
if (origin == FileSeekOrigin::Current)
239+
offset += qfile->pos();
240+
else if (origin == FileSeekOrigin::End)
241+
offset += qfile->size();
259242

260-
return fseek(reinterpret_cast<FILE *>(file), offset, stdorigin) == 0;
243+
return qfile->seek(offset);
261244
}
262245

263246
void FileRewind(FileHandle* file)
264247
{
265-
rewind(reinterpret_cast<FILE *>(file));
248+
reinterpret_cast<QFile*>(file)->seek(0);
266249
}
267250

268251
u64 FilePosition(FileHandle* file)
269252
{
270-
return ftell(reinterpret_cast<FILE *>(file));
253+
return reinterpret_cast<QFile*>(file)->pos();
271254
}
272255

273256
u64 FileRead(void* data, u64 size, u64 count, FileHandle* file)
274257
{
275-
return fread(data, size, count, reinterpret_cast<FILE *>(file));
258+
qint64 read = reinterpret_cast<QFile*>(file)->read(static_cast<char*>(data), size * count);
259+
260+
if (read > 0) read /= (qint64) size;
261+
return read;
276262
}
277263

278264
bool FileFlush(FileHandle* file)
279265
{
280-
return fflush(reinterpret_cast<FILE *>(file)) == 0;
266+
return reinterpret_cast<QFile*>(file)->flush();
281267
}
282268

283269
u64 FileWrite(const void* data, u64 size, u64 count, FileHandle* file)
284270
{
285-
return fwrite(data, size, count, reinterpret_cast<FILE *>(file));
271+
qint64 written = reinterpret_cast<QFile*>(file)->write(static_cast<const char*>(data), size * count);
272+
273+
if (written > 0) written /= (qint64) size;
274+
return written;
286275
}
287276

288277
u64 FileWriteFormatted(FileHandle* file, const char* fmt, ...)
@@ -299,12 +288,7 @@ u64 FileWriteFormatted(FileHandle* file, const char* fmt, ...)
299288

300289
u64 FileLength(FileHandle* file)
301290
{
302-
FILE* stdfile = reinterpret_cast<FILE *>(file);
303-
long pos = ftell(stdfile);
304-
fseek(stdfile, 0, SEEK_END);
305-
long len = ftell(stdfile);
306-
fseek(stdfile, pos, SEEK_SET);
307-
return len;
291+
return reinterpret_cast<QFile*>(file)->size();
308292
}
309293

310294
void Log(LogLevel level, const char* fmt, ...)

0 commit comments

Comments
 (0)