1
0
Fork 0
mirror of https://github.com/DarkMatterCore/nxdumptool.git synced 2024-11-23 02:36:41 +00:00

Commit filesystem changes when needed.

This commit is contained in:
Pablo Curiel 2020-08-01 00:43:55 -04:00
parent b11df5e732
commit 64f3a566f8
2 changed files with 85 additions and 44 deletions

View file

@ -60,6 +60,8 @@ static const u32 g_sizeSuffixesCount = MAX_ELEMENTS(g_sizeSuffixes);
static bool utilsMountEmmcBisSystemPartitionStorage(void); static bool utilsMountEmmcBisSystemPartitionStorage(void);
static void utilsUnmountEmmcBisSystemPartitionStorage(void); static void utilsUnmountEmmcBisSystemPartitionStorage(void);
static bool utilsGetDeviceFileSystemAndFilePathFromAbsolutePath(const char *path, FsFileSystem **out_fs, char **out_filepath);
static void _utilsGetCustomFirmwareType(void); static void _utilsGetCustomFirmwareType(void);
static void utilsOverclockSystemAppletHook(AppletHookType hook, void *param); static void utilsOverclockSystemAppletHook(AppletHookType hook, void *param);
@ -71,6 +73,13 @@ bool utilsInitializeResources(void)
bool ret = g_resourcesInitialized; bool ret = g_resourcesInitialized;
if (ret) goto end; if (ret) goto end;
/* Retrieve pointer to the SD card FsFileSystem element. */
if (!(g_sdCardFileSystem = fsdevGetDeviceFileSystem("sdmc:")))
{
LOGFILE("Failed to retrieve FsFileSystem from SD card!");
goto end;
}
/* Initialize needed services. */ /* Initialize needed services. */
if (!servicesInitialize()) if (!servicesInitialize())
{ {
@ -113,13 +122,6 @@ bool utilsInitializeResources(void)
goto end; goto end;
} }
/* Retrieve SD card FsFileSystem element. */
if (!(g_sdCardFileSystem = fsdevGetDeviceFileSystem("sdmc:")))
{
LOGFILE("fsdevGetDeviceFileSystem failed!");
goto end;
}
/* Mount eMMC BIS System partition. */ /* Mount eMMC BIS System partition. */
if (!utilsMountEmmcBisSystemPartitionStorage()) goto end; if (!utilsMountEmmcBisSystemPartitionStorage()) goto end;
@ -199,38 +201,27 @@ void utilsCloseResources(void)
u64 utilsHidKeysAllDown(void) u64 utilsHidKeysAllDown(void)
{ {
u8 controller;
u64 keys_down = 0; u64 keys_down = 0;
for(u32 i = 0; i < CONTROLLER_UNKNOWN; i++) keys_down |= hidKeysDown(i);
for(controller = 0; controller < (u8)CONTROLLER_P1_AUTO; controller++) keys_down |= hidKeysDown((HidControllerID)controller);
return keys_down; return keys_down;
} }
u64 utilsHidKeysAllHeld(void) u64 utilsHidKeysAllHeld(void)
{ {
u8 controller;
u64 keys_held = 0; u64 keys_held = 0;
for(u32 i = 0; i < CONTROLLER_UNKNOWN; i++) keys_held |= hidKeysHeld(i);
for(controller = 0; controller < (u8)CONTROLLER_P1_AUTO; controller++) keys_held |= hidKeysHeld((HidControllerID)controller);
return keys_held; return keys_held;
} }
void utilsWaitForButtonPress(u64 flag) void utilsWaitForButtonPress(u64 flag)
{
u64 keys_down = 0;
if (!flag)
{ {
/* Don't consider touch screen presses nor stick movement as button inputs. */ /* Don't consider touch screen presses nor stick movement as button inputs. */
flag = ~(KEY_TOUCH | KEY_LSTICK_LEFT | KEY_LSTICK_RIGHT | KEY_LSTICK_UP | KEY_LSTICK_DOWN | KEY_RSTICK_LEFT | KEY_RSTICK_RIGHT | KEY_RSTICK_UP | KEY_RSTICK_DOWN); if (!flag) flag = ~(KEY_TOUCH | KEY_LSTICK_LEFT | KEY_LSTICK_RIGHT | KEY_LSTICK_UP | KEY_LSTICK_DOWN | KEY_RSTICK_LEFT | KEY_RSTICK_RIGHT | KEY_RSTICK_UP | KEY_RSTICK_DOWN);
}
while(appletMainLoop()) while(appletMainLoop())
{ {
hidScanInput(); hidScanInput();
keys_down = utilsHidKeysAllDown(); u64 keys_down = utilsHidKeysAllDown();
if (keys_down & flag) break; if (keys_down & flag) break;
} }
} }
@ -258,6 +249,7 @@ void utilsWriteMessageToLogFile(const char *func_name, const char *fmt, ...)
fprintf(logfile, "\r\n"); fprintf(logfile, "\r\n");
fclose(logfile); fclose(logfile);
utilsCommitSdCardFileSystemChanges();
end: end:
mutexUnlock(&g_logfileMutex); mutexUnlock(&g_logfileMutex);
@ -296,6 +288,7 @@ void utilsWriteLogBufferToLogFile(const char *src)
fprintf(logfile, "%s", src); fprintf(logfile, "%s", src);
fclose(logfile); fclose(logfile);
utilsCommitSdCardFileSystemChanges();
end: end:
mutexUnlock(&g_logfileMutex); mutexUnlock(&g_logfileMutex);
@ -380,27 +373,54 @@ void utilsGenerateFormattedSizeString(u64 size, char *dst, size_t dst_size)
} }
} }
bool utilsGetFreeSdCardSpace(u64 *out) bool utilsGetFreeSpaceFromFileSystem(FsFileSystem *fs, u64 *out)
{ {
return utilsGetFreeFileSystemSpace(g_sdCardFileSystem, out); if (!fs || !serviceIsActive(&(fs->s)) || !out)
}
bool utilsGetFreeFileSystemSpace(FsFileSystem *fs, u64 *out)
{
if (!fs || !out)
{ {
LOGFILE("Invalid parameters!"); LOGFILE("Invalid parameters!");
return false; return false;
} }
Result rc = fsFsGetFreeSpace(fs, "/", (s64*)out); Result rc = fsFsGetFreeSpace(fs, "/", (s64*)out);
if (R_FAILED(rc)) if (R_FAILED(rc)) LOGFILE("fsFsGetFreeSpace failed! (0x%08X).", rc);
return R_SUCCEEDED(rc);
}
bool utilsGetFreeSpaceFromFileSystemByPath(const char *path, u64 *out)
{ {
LOGFILE("fsFsGetFreeSpace failed! (0x%08X).", rc); FsFileSystem *fs = NULL;
if (!utilsGetDeviceFileSystemAndFilePathFromAbsolutePath(path, &fs, NULL) || !out)
{
LOGFILE("Invalid parameters!");
return false; return false;
} }
return true; return utilsGetFreeSpaceFromFileSystem(fs, out);
}
bool utilsGetFreeSdCardFileSystemSpace(u64 *out)
{
return utilsGetFreeSpaceFromFileSystem(g_sdCardFileSystem, out);
}
bool utilsCommitFileSystemChangesByPath(const char *path)
{
Result rc = 0;
FsFileSystem *fs = NULL;
if (!utilsGetDeviceFileSystemAndFilePathFromAbsolutePath(path, &fs, NULL)) return false;
rc = fsFsCommit(fs);
return R_SUCCEEDED(rc);
}
bool utilsCommitSdCardFileSystemChanges(void)
{
if (!g_sdCardFileSystem) return false;
Result rc = fsFsCommit(g_sdCardFileSystem);
return R_SUCCEEDED(rc);
} }
bool utilsCheckIfFileExists(const char *path) bool utilsCheckIfFileExists(const char *path)
@ -419,8 +439,6 @@ bool utilsCheckIfFileExists(const char *path)
bool utilsCreateConcatenationFile(const char *path) bool utilsCreateConcatenationFile(const char *path)
{ {
Result rc = 0;
if (!path || !strlen(path)) if (!path || !strlen(path))
{ {
LOGFILE("Invalid parameters!"); LOGFILE("Invalid parameters!");
@ -433,14 +451,12 @@ bool utilsCreateConcatenationFile(const char *path)
/* Create ConcatenationFile */ /* Create ConcatenationFile */
/* If the call succeeds, the caller function will be able to operate on this file using stdio calls. */ /* If the call succeeds, the caller function will be able to operate on this file using stdio calls. */
rc = fsdevCreateFile(path, 0, FsCreateOption_BigFile); Result rc = fsdevCreateFile(path, 0, FsCreateOption_BigFile);
if (R_FAILED(rc)) if (R_FAILED(rc)) LOGFILE("fsdevCreateFile failed for \"%s\"! (0x%08X).", path, rc);
{
LOGFILE("fsdevCreateFile failed for \"%s\"! (0x%08X).", path, rc);
return false;
}
return true; utilsCommitFileSystemChangesByPath(path);
return R_SUCCEEDED(rc);
} }
void utilsCreateDirectoryTree(const char *path, bool create_last_element) void utilsCreateDirectoryTree(const char *path, bool create_last_element)
@ -464,6 +480,8 @@ void utilsCreateDirectoryTree(const char *path, bool create_last_element)
if (create_last_element) mkdir(path, 0777); if (create_last_element) mkdir(path, 0777);
free(tmp); free(tmp);
utilsCommitFileSystemChangesByPath(path);
} }
bool utilsAppletModeCheck(void) bool utilsAppletModeCheck(void)
@ -553,6 +571,25 @@ static void utilsUnmountEmmcBisSystemPartitionStorage(void)
} }
} }
static bool utilsGetDeviceFileSystemAndFilePathFromAbsolutePath(const char *path, FsFileSystem **out_fs, char **out_filepath)
{
FsFileSystem *fs = NULL;
char *name_end = NULL, *filepath = NULL, name[32] = {0};
if (!path || !strlen(path) || !(name_end = strchr(path, ':')) || (size_t)(name_end - path) >= MAX_ELEMENTS(name) || (!out_fs && !out_filepath) || \
(out_filepath && *(filepath = (name_end + 1)) != '/')) return false;
sprintf(name, "%.*s", (int)(name_end - path), path);
fs = fsdevGetDeviceFileSystem(name);
if (!fs) return false;
if (out_fs) *out_fs = fs;
if (out_filepath) *out_filepath = filepath;
return true;
}
static void _utilsGetCustomFirmwareType(void) static void _utilsGetCustomFirmwareType(void)
{ {
bool tx_srv = servicesCheckRunningServiceByName("tx"); bool tx_srv = servicesCheckRunningServiceByName("tx");

View file

@ -95,8 +95,12 @@ void utilsGenerateHexStringFromData(char *dst, size_t dst_size, const void *src,
void utilsGenerateFormattedSizeString(u64 size, char *dst, size_t dst_size); void utilsGenerateFormattedSizeString(u64 size, char *dst, size_t dst_size);
bool utilsGetFreeSdCardSpace(u64 *out); bool utilsGetFreeSpaceFromFileSystem(FsFileSystem *fs, u64 *out);
bool utilsGetFreeFileSystemSpace(FsFileSystem *fs, u64 *out); bool utilsGetFreeSpaceFromFileSystemByPath(const char *path, u64 *out);
bool utilsGetFreeSdCardFileSystemSpace(u64 *out);
bool utilsCommitFileSystemChangesByPath(const char *path);
bool utilsCommitSdCardFileSystemChanges(void);
bool utilsCheckIfFileExists(const char *path); bool utilsCheckIfFileExists(const char *path);