mirror of
https://github.com/wiiu-env/libsdutils.git
synced 2024-11-01 01:35:05 +01:00
Add CleanUpHandles-Callbacks
This commit is contained in:
parent
c9c3ba3f71
commit
846015ef2e
@ -28,6 +28,8 @@ enum SDUtilsAttachStatus {
|
|||||||
|
|
||||||
typedef void (*SDAttachHandlerFn)(SDUtilsAttachStatus status);
|
typedef void (*SDAttachHandlerFn)(SDUtilsAttachStatus status);
|
||||||
|
|
||||||
|
typedef void (*SDCleanUpHandlesHandlerFn)();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes the SDUtils library. This must be call before any other function can be called
|
* Initializes the SDUtils library. This must be call before any other function can be called
|
||||||
* @return SDUTILS_RESULT_SUCCESS on success, the functions of this lib can be used
|
* @return SDUTILS_RESULT_SUCCESS on success, the functions of this lib can be used
|
||||||
@ -61,7 +63,7 @@ SDUtilsStatus SDUtils_DeInit();
|
|||||||
* @return SDUTILS_RESULT_SUCCESS on success
|
* @return SDUTILS_RESULT_SUCCESS on success
|
||||||
* SDUTILS_RESULT_MAX_CALLBACKS when registering the callback has failed because the
|
* SDUTILS_RESULT_MAX_CALLBACKS when registering the callback has failed because the
|
||||||
* maximum amount of callback has been reached
|
* maximum amount of callback has been reached
|
||||||
* SDUTILS_RESULT_LIB_UNINITIALIZED if the lib was not initalized properly
|
* SDUTILS_RESULT_LIB_UNINITIALIZED if the lib was not initialized properly
|
||||||
*/
|
*/
|
||||||
SDUtilsStatus SDUtils_AddAttachHandler(SDAttachHandlerFn fn);
|
SDUtilsStatus SDUtils_AddAttachHandler(SDAttachHandlerFn fn);
|
||||||
|
|
||||||
@ -71,10 +73,38 @@ SDUtilsStatus SDUtils_AddAttachHandler(SDAttachHandlerFn fn);
|
|||||||
* @param fn
|
* @param fn
|
||||||
* @return SDUTILS_RESULT_SUCCESS on success
|
* @return SDUTILS_RESULT_SUCCESS on success
|
||||||
* SDUTILS_RESULT_NOT_FOUND when the given callback was not registered.
|
* SDUTILS_RESULT_NOT_FOUND when the given callback was not registered.
|
||||||
* SDUTILS_RESULT_LIB_UNINITIALIZED if the lib was not initalized properly
|
* SDUTILS_RESULT_LIB_UNINITIALIZED if the lib was not initialized properly
|
||||||
*/
|
*/
|
||||||
SDUtilsStatus SDUtils_RemoveAttachHandler(SDAttachHandlerFn fn);
|
SDUtilsStatus SDUtils_RemoveAttachHandler(SDAttachHandlerFn fn);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers a callback which will be called whenever a sd card will be ejected and before
|
||||||
|
* the SDUtils_AddAttachHandler. This callback is supposed to be used to clean up any open
|
||||||
|
* file handles before the sd card gets unmounted.
|
||||||
|
* This is only true for future events, if the sd card is already ejected before registering
|
||||||
|
* a callback, the callback is only called on the next ejecting.
|
||||||
|
*
|
||||||
|
* Any previously registered callbacks will be removed when the currently running application
|
||||||
|
* is closing.
|
||||||
|
*
|
||||||
|
* @param fn callback that will be called
|
||||||
|
* @return SDUTILS_RESULT_SUCCESS on success
|
||||||
|
* SDUTILS_RESULT_MAX_CALLBACKS when registering the callback has failed because the
|
||||||
|
* maximum amount of callback has been reached
|
||||||
|
* SDUTILS_RESULT_LIB_UNINITIALIZED if the lib was not initialized properly
|
||||||
|
*/
|
||||||
|
SDUtilsStatus SDUtils_AddCleanUpHandlesHandler(SDCleanUpHandlesHandlerFn fn);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removed a previously registered callback
|
||||||
|
*
|
||||||
|
* @param fn
|
||||||
|
* @return SDUTILS_RESULT_SUCCESS on success
|
||||||
|
* SDUTILS_RESULT_NOT_FOUND when the given callback was not registered.
|
||||||
|
* SDUTILS_RESULT_LIB_UNINITIALIZED if the lib was not initialized properly
|
||||||
|
*/
|
||||||
|
SDUtilsStatus SDUtils_RemoveCleanUpHandlesHandler(SDCleanUpHandlesHandlerFn fn);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if a FAT32 formatted SD Card is inserted, mounted and available via `fs:/vol/external01`
|
* Checks if a FAT32 formatted SD Card is inserted, mounted and available via `fs:/vol/external01`
|
||||||
*
|
*
|
||||||
|
@ -10,6 +10,9 @@ static SDUtilsVersion (*sSDUtilsGetVersion)() = nullptr;
|
|||||||
static bool (*sSDUtilsAddAttachHandler)(SDAttachHandlerFn) = nullptr;
|
static bool (*sSDUtilsAddAttachHandler)(SDAttachHandlerFn) = nullptr;
|
||||||
static bool (*sSDUtilsRemoveAttachHandler)(SDAttachHandlerFn) = nullptr;
|
static bool (*sSDUtilsRemoveAttachHandler)(SDAttachHandlerFn) = nullptr;
|
||||||
|
|
||||||
|
static bool (*sSDUtilsAddCleanUpHandlesHandler)(SDCleanUpHandlesHandlerFn) = nullptr;
|
||||||
|
static bool (*sSDUtilsRemoveCleanUpHandlesHandler)(SDCleanUpHandlesHandlerFn) = nullptr;
|
||||||
|
|
||||||
SDUtilsStatus SDUtils_Init() {
|
SDUtilsStatus SDUtils_Init() {
|
||||||
if (OSDynLoad_Acquire("homebrew_sdhotswap", &sModuleHandle) != OS_DYNLOAD_OK) {
|
if (OSDynLoad_Acquire("homebrew_sdhotswap", &sModuleHandle) != OS_DYNLOAD_OK) {
|
||||||
OSReport("SDUtils_Init: OSDynLoad_Acquire failed.\n");
|
OSReport("SDUtils_Init: OSDynLoad_Acquire failed.\n");
|
||||||
@ -35,6 +38,16 @@ SDUtilsStatus SDUtils_Init() {
|
|||||||
return SDUTILS_RESULT_MODULE_MISSING_EXPORT;
|
return SDUTILS_RESULT_MODULE_MISSING_EXPORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (OSDynLoad_FindExport(sModuleHandle, FALSE, "SDUtilsAddCleanUpHandlesHandler", (void **) &sSDUtilsAddCleanUpHandlesHandler) != OS_DYNLOAD_OK) {
|
||||||
|
OSReport("SDUtils_Init: SDUtilsAddCleanUpHandlesHandler failed.\n");
|
||||||
|
return SDUTILS_RESULT_MODULE_MISSING_EXPORT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (OSDynLoad_FindExport(sModuleHandle, FALSE, "SDUtilsRemoveCleanUpHandlesHandler", (void **) &sSDUtilsRemoveCleanUpHandlesHandler) != OS_DYNLOAD_OK) {
|
||||||
|
OSReport("SDUtils_Init: SDUtilsRemoveCleanUpHandlesHandler failed.\n");
|
||||||
|
return SDUTILS_RESULT_MODULE_MISSING_EXPORT;
|
||||||
|
}
|
||||||
|
|
||||||
return SDUTILS_RESULT_SUCCESS;
|
return SDUTILS_RESULT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,7 +65,6 @@ SDUtilsStatus SDUtils_DeInit() {
|
|||||||
return SDUTILS_RESULT_SUCCESS;
|
return SDUTILS_RESULT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SDUtilsStatus SDUtils_IsSdCardMounted(bool *status) {
|
SDUtilsStatus SDUtils_IsSdCardMounted(bool *status) {
|
||||||
if (status == nullptr) {
|
if (status == nullptr) {
|
||||||
return SDUTILS_RESULT_INVALID_ARGUMENT;
|
return SDUTILS_RESULT_INVALID_ARGUMENT;
|
||||||
@ -77,7 +89,6 @@ SDUtilsStatus SDUtils_AddAttachHandler(SDAttachHandlerFn fn) {
|
|||||||
return res ? SDUTILS_RESULT_SUCCESS : SDUTILS_RESULT_MAX_CALLBACKS;
|
return res ? SDUTILS_RESULT_SUCCESS : SDUTILS_RESULT_MAX_CALLBACKS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool RemoveAttachHandler(SDAttachHandlerFn);
|
bool RemoveAttachHandler(SDAttachHandlerFn);
|
||||||
|
|
||||||
SDUtilsStatus SDUtils_RemoveAttachHandler(SDAttachHandlerFn fn) {
|
SDUtilsStatus SDUtils_RemoveAttachHandler(SDAttachHandlerFn fn) {
|
||||||
@ -87,3 +98,23 @@ SDUtilsStatus SDUtils_RemoveAttachHandler(SDAttachHandlerFn fn) {
|
|||||||
auto res = reinterpret_cast<decltype(&RemoveAttachHandler)>(sSDUtilsRemoveAttachHandler)(fn);
|
auto res = reinterpret_cast<decltype(&RemoveAttachHandler)>(sSDUtilsRemoveAttachHandler)(fn);
|
||||||
return res ? SDUTILS_RESULT_SUCCESS : SDUTILS_RESULT_NOT_FOUND;
|
return res ? SDUTILS_RESULT_SUCCESS : SDUTILS_RESULT_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool AddCleanUpHandlesHandler(SDCleanUpHandlesHandlerFn);
|
||||||
|
|
||||||
|
SDUtilsStatus SDUtils_AddCleanUpHandlesHandler(SDCleanUpHandlesHandlerFn fn) {
|
||||||
|
if (sSDUtilsAddCleanUpHandlesHandler == nullptr) {
|
||||||
|
return SDUTILS_RESULT_LIB_UNINITIALIZED;
|
||||||
|
}
|
||||||
|
auto res = reinterpret_cast<decltype(&AddCleanUpHandlesHandler)>(sSDUtilsAddCleanUpHandlesHandler)(fn);
|
||||||
|
return res ? SDUTILS_RESULT_SUCCESS : SDUTILS_RESULT_MAX_CALLBACKS;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RemoveCleanUpHandlesHandler(SDCleanUpHandlesHandlerFn);
|
||||||
|
|
||||||
|
SDUtilsStatus SDUtils_RemoveCleanUpHandlesHandler(SDCleanUpHandlesHandlerFn fn) {
|
||||||
|
if (sSDUtilsRemoveCleanUpHandlesHandler == nullptr) {
|
||||||
|
return SDUTILS_RESULT_LIB_UNINITIALIZED;
|
||||||
|
}
|
||||||
|
auto res = reinterpret_cast<decltype(&RemoveCleanUpHandlesHandler)>(sSDUtilsRemoveCleanUpHandlesHandler)(fn);
|
||||||
|
return res ? SDUTILS_RESULT_SUCCESS : SDUTILS_RESULT_NOT_FOUND;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user