mirror of https://github.com/mgba-emu/mgba.git
3DS: Adapt VFileOpen for 3DS
This commit is contained in:
parent
7fa5353801
commit
2c7926ef66
|
@ -12,6 +12,8 @@
|
||||||
|
|
||||||
#include <3ds.h>
|
#include <3ds.h>
|
||||||
|
|
||||||
|
extern FS_archive sdmcArchive;
|
||||||
|
|
||||||
struct VFile* VFileOpen3DS(FS_archive* archive, const char* path, int flags);
|
struct VFile* VFileOpen3DS(FS_archive* archive, const char* path, int flags);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -13,6 +13,8 @@
|
||||||
|
|
||||||
#include <3ds.h>
|
#include <3ds.h>
|
||||||
|
|
||||||
|
FS_archive sdmcArchive;
|
||||||
|
|
||||||
static void GBA3DSLog(struct GBAThread* thread, enum GBALogLevel level, const char* format, va_list args);
|
static void GBA3DSLog(struct GBAThread* thread, enum GBALogLevel level, const char* format, va_list args);
|
||||||
static Handle logFile;
|
static Handle logFile;
|
||||||
|
|
||||||
|
@ -22,10 +24,9 @@ int main() {
|
||||||
hidInit(0);
|
hidInit(0);
|
||||||
gfxInit(GSP_RGB565_OES, GSP_RGB565_OES, false);
|
gfxInit(GSP_RGB565_OES, GSP_RGB565_OES, false);
|
||||||
fsInit();
|
fsInit();
|
||||||
|
sdmcArchive = (FS_archive) {
|
||||||
FS_archive sdmcArchive = (FS_archive) {
|
|
||||||
ARCH_SDMC,
|
ARCH_SDMC,
|
||||||
(FS_path) { PATH_EMPTY, 1, (u8*)"" },
|
(FS_path) { PATH_EMPTY, 1, (const u8*)"" },
|
||||||
0, 0
|
0, 0
|
||||||
};
|
};
|
||||||
FSUSER_OpenArchive(0, &sdmcArchive);
|
FSUSER_OpenArchive(0, &sdmcArchive);
|
||||||
|
|
|
@ -5,6 +5,10 @@
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
#include "vfs.h"
|
#include "vfs.h"
|
||||||
|
|
||||||
|
#ifdef _3DS
|
||||||
|
#include "platform/3ds/3ds-vfs.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
struct VFile* VFileOpen(const char* path, int flags) {
|
struct VFile* VFileOpen(const char* path, int flags) {
|
||||||
#ifdef USE_VFS_FILE
|
#ifdef USE_VFS_FILE
|
||||||
const char* chflags;
|
const char* chflags;
|
||||||
|
@ -30,6 +34,34 @@ struct VFile* VFileOpen(const char* path, int flags) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return VFileFOpen(path, chflags);
|
return VFileFOpen(path, chflags);
|
||||||
|
#elif defined(_3DS)
|
||||||
|
int ctrFlags = FS_OPEN_READ;
|
||||||
|
switch (flags & O_ACCMODE) {
|
||||||
|
case O_WRONLY:
|
||||||
|
ctrFlags = FS_OPEN_WRITE;
|
||||||
|
break;
|
||||||
|
case O_RDWR:
|
||||||
|
ctrFlags = FS_OPEN_READ | FS_OPEN_WRITE;
|
||||||
|
break;
|
||||||
|
case O_RDONLY:
|
||||||
|
ctrFlags = FS_OPEN_READ;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flags & O_CREAT) {
|
||||||
|
ctrFlags |= FS_OPEN_CREATE;
|
||||||
|
}
|
||||||
|
struct VFile* vf = VFileOpen3DS(&sdmcArchive, path, ctrFlags);
|
||||||
|
if (!vf) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (flags & O_TRUNC) {
|
||||||
|
vf->truncate(vf, 0);
|
||||||
|
}
|
||||||
|
if (flags & O_APPEND) {
|
||||||
|
vf->seek(vf, vf->size(vf), SEEK_SET);
|
||||||
|
}
|
||||||
|
return vf;
|
||||||
#else
|
#else
|
||||||
return VFileOpenFD(path, flags);
|
return VFileOpenFD(path, flags);
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue