Use relative paths where possible.

This commit is contained in:
profi200 2020-11-29 22:52:13 +01:00
parent 31bbcbfe25
commit 48def49f8b
No known key found for this signature in database
GPG Key ID: 17B42AE5911139F3
7 changed files with 29 additions and 9 deletions

View File

@ -51,6 +51,7 @@ u32 fTell(FHandle h);
u32 fSize(FHandle h);
Result fClose(FHandle h);
Result fStat(const char *const path, FILINFO *const fi);
Result fChdir(const char *const path);
Result fOpenDir(DHandle *const hOut, const char *const path);
Result fReadDir(DHandle h, FILINFO *const fi, u32 num, u32 *const entriesRead);
Result fCloseDir(DHandle h);

View File

@ -50,6 +50,7 @@ typedef enum
IPC_CMD9_FSIZE = MAKE_CMD9(0, 0, 1),
IPC_CMD9_FCLOSE = MAKE_CMD9(0, 0, 1),
IPC_CMD9_FSTAT = MAKE_CMD9(1, 1, 0),
IPC_CMD9_FCHDIR = MAKE_CMD9(1, 0, 0),
IPC_CMD9_FOPEN_DIR = MAKE_CMD9(1, 1, 0),
IPC_CMD9_FREAD_DIR = MAKE_CMD9(0, 2, 2),
IPC_CMD9_FCLOSE_DIR = MAKE_CMD9(0, 0, 1),

View File

@ -127,6 +127,15 @@ Result fStat(const char *const path, FILINFO *const fi)
return PXI_sendCmd(IPC_CMD9_FSTAT, cmdBuf, 4);
}
Result fChdir(const char *const path)
{
u32 cmdBuf[2];
cmdBuf[0] = (u32)path;
cmdBuf[1] = strlen(path) + 1;
return PXI_sendCmd(IPC_CMD9_FCHDIR, cmdBuf, 2);
}
Result fOpenDir(DHandle *const hOut, const char *const path)
{
u32 cmdBuf[4];

View File

@ -157,7 +157,7 @@ static Result searchGameDb(u64 x, GameDbEntry *const db, s32 *const entryPos)
Result res;
FHandle f;
if((res = fOpen(&f, OAF_WORK_DIR "/gba_db.bin", FA_OPEN_EXISTING | FA_READ)) == RES_OK)
if((res = fOpen(&f, "gba_db.bin", FA_OPEN_EXISTING | FA_READ)) == RES_OK)
{
s32 l = 0;
s32 r = fSize(f) / sizeof(GameDbEntry) - 1; // TODO: Check for 0!
@ -391,7 +391,7 @@ static u16 saveDbDebug(const char *const savePath, u32 romSize)
{
dbEntry.attr = saveType;
FHandle f;
if(fOpen(&f, OAF_WORK_DIR "/gba_db.bin", FA_OPEN_EXISTING | FA_WRITE) == RES_OK)
if(fOpen(&f, "gba_db.bin", FA_OPEN_EXISTING | FA_WRITE) == RES_OK)
{
fLseek(f, (sizeof(GameDbEntry) * dbPos) + offsetof(GameDbEntry, attr));
fWrite(f, &dbEntry.attr, sizeof(dbEntry.attr), NULL);
@ -456,7 +456,7 @@ static Result dumpFrameTex(void)
memcpy((void*)0x18400000, bmpHeader, sizeof(bmpHeader));
return fsQuickWrite("sdmc:/texture_dump.bmp", (void*)0x18400000, 0x40 + 512 * 512 * 3);
return fsQuickWrite("texture_dump.bmp", (void*)0x18400000, 0x40 + 512 * 512 * 3);
}
static void gbaGfxHandler(void *args)
@ -568,12 +568,12 @@ static Result parseMainConfig(void)
char *iniBuf = (char*)calloc(INI_BUF_SIZE, 1);
if(iniBuf == NULL) return RES_OUT_OF_MEM;
Result res = fsQuickRead(OAF_WORK_DIR "/config.ini", iniBuf, INI_BUF_SIZE - 1);
Result res = fsQuickRead("config.ini", iniBuf, INI_BUF_SIZE - 1);
if(res == RES_OK) ini_parse_string(iniBuf, confIniCallback, &g_oafConfig);
else
{
const char *const defaultConfig = DEFAULT_CONFIG;
res = fsQuickWrite(OAF_WORK_DIR "/config.ini", defaultConfig, strlen(defaultConfig));
res = fsQuickWrite("config.ini", defaultConfig, strlen(defaultConfig));
}
// Apply backlight brightness.
@ -597,14 +597,15 @@ static Result handleFsStuff(char romPath[512])
{
do
{
// Create working dir.
// Create the work dir and switch to it.
if((res = fsMakePath(OAF_WORK_DIR)) != RES_OK && res != RES_FR_EXIST) break;
if((res = fChdir(OAF_WORK_DIR)) != RES_OK) break;
// Parse config.
parseMainConfig();
// Get last ROM launch path.
if((res = fsQuickRead(OAF_WORK_DIR "/lastdir.bin", lastDir, 511)) != RES_OK)
if((res = fsQuickRead("lastdir.bin", lastDir, 511)) != RES_OK)
{
if(res == RES_FR_NO_FILE) strcpy(lastDir, "sdmc:/");
else break;
@ -631,7 +632,7 @@ static Result handleFsStuff(char romPath[512])
{
strncpy(lastDir, romPath, cmpLen);
lastDir[cmpLen] = '\0';
res = fsQuickWrite(OAF_WORK_DIR "/lastdir.bin", lastDir, cmpLen + 1);
res = fsQuickWrite("lastdir.bin", lastDir, cmpLen + 1);
}
}
} while(0);

View File

@ -197,6 +197,11 @@ Result fStat(const char *const path, FILINFO *const fi)
return fres2Res(f_stat(path, fi));
}
Result fChdir(const char *const path)
{
return fres2Res(f_chdir(path));
}
Result fOpenDir(DHandle *const hOut, const char *const path)
{
if(hOut == NULL) return RES_INVALID_ARG;

View File

@ -73,6 +73,9 @@ u32 IPC_handleCmd(u8 cmdId, u32 inBufs, u32 outBufs, const u32 *const buf)
case IPC_CMD_ID_MASK(IPC_CMD9_FSTAT):
result = fStat((const char *const)buf[0], (FILINFO *const)buf[2]);
break;
case IPC_CMD_ID_MASK(IPC_CMD9_FCHDIR):
result = fChdir((const char *const)buf[0]);
break;
case IPC_CMD_ID_MASK(IPC_CMD9_FOPEN_DIR):
result = fOpenDir((DHandle *const)buf[2], (const char *const)buf[0]);
break;

View File

@ -150,7 +150,7 @@
*/
#define FF_FS_RPATH 0
#define FF_FS_RPATH 1
/* This option configures support for relative path.
/
/ 0: Disable relative path and remove related functions.