From 8c54613e4415dc4883c368a2f2d872e7368ce599 Mon Sep 17 00:00:00 2001 From: TuxSH Date: Tue, 28 Apr 2020 00:05:55 +0100 Subject: [PATCH] rosalina/sysconfig: fix handling of disconnected routers in wifi forcing + handle leak --- sysmodules/rosalina/include/menus/sysconfig.h | 2 ++ sysmodules/rosalina/source/menus/sysconfig.c | 16 ++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/sysmodules/rosalina/include/menus/sysconfig.h b/sysmodules/rosalina/include/menus/sysconfig.h index 2cc448b..a4188fa 100644 --- a/sysmodules/rosalina/include/menus/sysconfig.h +++ b/sysmodules/rosalina/include/menus/sysconfig.h @@ -32,6 +32,8 @@ extern Menu sysconfigMenu; extern bool isConnectionForced; +void SysConfigMenu_UpdateStatus(bool control); + void SysConfigMenu_ToggleLEDs(void); void SysConfigMenu_ToggleWireless(void); void SysConfigMenu_TogglePowerButton(void); diff --git a/sysmodules/rosalina/source/menus/sysconfig.c b/sysmodules/rosalina/source/menus/sysconfig.c index c6ee586..e927398 100644 --- a/sysmodules/rosalina/source/menus/sysconfig.c +++ b/sysmodules/rosalina/source/menus/sysconfig.c @@ -151,7 +151,7 @@ void SysConfigMenu_ToggleWireless(void) while(!terminationRequest); } -static void SysConfigMenu_UpdateStatus(bool control) +void SysConfigMenu_UpdateStatus(bool control) { MenuItem *item = &sysconfigMenu.items[3]; @@ -170,8 +170,10 @@ static void SysConfigMenu_UpdateStatus(bool control) static bool SysConfigMenu_ForceWifiConnection(int slot) { char ssid[0x20 + 1] = {0}; + isConnectionForced = false; - acInit(); + if(R_FAILED(acInit())) + return false; acuConfig config = {0}; ACU_CreateDefaultConfig(&config); @@ -185,12 +187,8 @@ static bool SysConfigMenu_ForceWifiConnection(int slot) bool forcedConnection = false; if(R_SUCCEEDED(ACU_ConnectAsync(&config, connectEvent))) { - if(R_SUCCEEDED(svcWaitSynchronization(connectEvent, -1))) - { - if(R_FAILED(ACU_GetSSID(ssid))) - ssid[0] = 0; + if(R_SUCCEEDED(svcWaitSynchronization(connectEvent, -1)) && R_SUCCEEDED(ACU_GetSSID(ssid))) forcedConnection = true; - } } svcCloseHandle(connectEvent); @@ -199,6 +197,8 @@ static bool SysConfigMenu_ForceWifiConnection(int slot) isConnectionForced = true; SysConfigMenu_UpdateStatus(false); } + else + acExit(); char infoString[80] = {0}; u32 infoStringColor = forcedConnection ? COLOR_GREEN : COLOR_RED; @@ -349,7 +349,7 @@ void SysConfigMenu_DisableForcedWifiConnection(void) { Draw_Lock(); Draw_DrawString(10, 10, COLOR_TITLE, "System configuration menu"); - Draw_DrawString(10, 30, COLOR_WHITE, "Forced connection successfully disabled."); + Draw_DrawString(10, 30, COLOR_WHITE, "Forced connection successfully disabled.\nNote: auto-connection may remain broken."); u32 pressed = waitInputWithTimeout(1000); if(pressed & BUTTON_B)