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-
5244extern CameraManager* camManager[2 ];
5345
5446extern 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
181168bool 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
186176bool IsEndOfFile (FileHandle* file)
187177{
188- return feof ( reinterpret_cast <FILE *>(file)) != 0 ;
178+ return reinterpret_cast <QFile *>(file)-> atEnd () ;
189179}
190180
191181bool 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
196186bool 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
204191bool 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
212196bool CheckFileWritable (const std::string& filepath)
@@ -249,40 +233,45 @@ bool CheckLocalFileWritable(const std::string& name)
249233
250234bool 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
263246void FileRewind (FileHandle* file)
264247{
265- rewind ( reinterpret_cast <FILE *>(file));
248+ reinterpret_cast <QFile *>(file)-> seek ( 0 );
266249}
267250
268251u64 FilePosition (FileHandle* file)
269252{
270- return ftell ( reinterpret_cast <FILE *>(file));
253+ return reinterpret_cast <QFile *>(file)-> pos ( );
271254}
272255
273256u64 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
278264bool FileFlush (FileHandle* file)
279265{
280- return fflush ( reinterpret_cast <FILE *>(file)) == 0 ;
266+ return reinterpret_cast <QFile *>(file)-> flush () ;
281267}
282268
283269u64 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
288277u64 FileWriteFormatted (FileHandle* file, const char * fmt, ...)
@@ -299,12 +288,7 @@ u64 FileWriteFormatted(FileHandle* file, const char* fmt, ...)
299288
300289u64 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
310294void Log (LogLevel level, const char * fmt, ...)
0 commit comments