From 372505f030219768a9f49f5312d9548d92eb9647 Mon Sep 17 00:00:00 2001 From: chaoskagami Date: Fri, 14 Oct 2016 00:14:48 -0400 Subject: [PATCH] Update fs.c to allow initialization from non-fs:USER handles (like fs:LDR) --- libctru/include/3ds/services/fs.h | 10 ++++++++-- libctru/source/services/fs.c | 12 ++++++++---- libctru/source/system/appInit.c | 2 +- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/libctru/include/3ds/services/fs.h b/libctru/include/3ds/services/fs.h index 8db6c15..8dbc026 100644 --- a/libctru/include/3ds/services/fs.h +++ b/libctru/include/3ds/services/fs.h @@ -237,8 +237,14 @@ typedef struct /// Filesystem archive handle, providing access to a filesystem's contents. typedef u64 FS_Archive; -/// Initializes FS. -Result fsInit(void); +/** + * @brief Initializes FS from a service name, such as "fs:USER" or "fs:LDR" + * @param service The name of the service to initialize from. + */ +Result fsInitFromService(const char *service); + +/// Initializes FS with the fs:USER service. +Result fsInitDefault(void); /// Exits FS. void fsExit(void); diff --git a/libctru/source/services/fs.c b/libctru/source/services/fs.c index db1a75f..459798a 100644 --- a/libctru/source/services/fs.c +++ b/libctru/source/services/fs.c @@ -35,14 +35,13 @@ static Handle fsSessionForArchive(FS_Archive archive) return fsSession(); } -Result fsInit(void) -{ +Result fsInitFromService(const char* service) { Result ret = 0; if (AtomicPostIncrement(&fsuRefCount)) return 0; - ret = srvGetServiceHandle(&fsuHandle, "fs:USER"); - if (R_SUCCEEDED(ret) && envGetHandle("fs:USER") == 0) + ret = srvGetServiceHandle(&fsuHandle, service); + if (R_SUCCEEDED(ret) && envGetHandle(service) == 0) { ret = FSUSER_Initialize(fsuHandle); if (R_FAILED(ret)) svcCloseHandle(fsuHandle); @@ -52,6 +51,11 @@ Result fsInit(void) return ret; } +Result fsInitDefault(void) +{ + return fsInitFromService("fs:USER"); +} + void fsExit(void) { if (AtomicDecrement(&fsuRefCount)) return; diff --git a/libctru/source/system/appInit.c b/libctru/source/system/appInit.c index d9c4301..52c9104 100644 --- a/libctru/source/system/appInit.c +++ b/libctru/source/system/appInit.c @@ -12,6 +12,6 @@ void __attribute__((weak)) __appInit(void) { aptInit(); hidInit(); - fsInit(); + fsInitDefault(); sdmcInit(); } -- 2.39.5