diff --git a/src/common/Settings.hpp b/src/common/Settings.hpp index d24a6f755..c6e4a675d 100644 --- a/src/common/Settings.hpp +++ b/src/common/Settings.hpp @@ -58,7 +58,7 @@ typedef enum _CXBX_DATA { // ****************************************************************** // * Define number of integers required to store logging settings // ****************************************************************** -#define NUM_INTEGERS_LOG 2 +#define NUM_INTEGERS_LOG 3 enum { LLE_NONE = 0, @@ -109,7 +109,7 @@ public: bool Reserved4 = 0; int Reserved99[10] = { 0 }; } m_core; - static_assert(sizeof(s_core) == 0x24C, assert_check_shared_memory(s_core)); + static_assert(sizeof(s_core) == 0x250, assert_check_shared_memory(s_core)); // Video settings struct s_video { diff --git a/src/gui/DlgLoggingConfig.cpp b/src/gui/DlgLoggingConfig.cpp index 130d43fff..80a46a931 100644 --- a/src/gui/DlgLoggingConfig.cpp +++ b/src/gui/DlgLoggingConfig.cpp @@ -30,6 +30,9 @@ #include "common\IPCHybrid.hpp" +// Sanity check: ensure that NUM_INTEGERS_LOG is large enough to hold all our logging modules +static_assert(to_underlying(CXBXR_MODULE::MAX) <= sizeof(unsigned int) * CHAR_BIT * NUM_INTEGERS_LOG); + static bool g_bHasChanges = false; static HWND g_ChildWnd = NULL; INT_PTR CALLBACK DlgLogConfigProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); @@ -128,8 +131,9 @@ INT_PTR CALLBACK DlgLogConfigProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM // Set window icon SetClassLong(hWndDlg, GCL_HICON, (LONG)LoadIcon(GetModuleHandle(nullptr), MAKEINTRESOURCE(IDI_CXBX))); - LoggedModules[0] = g_Settings->m_core.LoggedModules[0]; - LoggedModules[1] = g_Settings->m_core.LoggedModules[1]; + for (unsigned i = 0; i < NUM_INTEGERS_LOG; ++i) { + LoggedModules[i] = g_Settings->m_core.LoggedModules[i]; + } LogLevel = g_Settings->m_core.LogLevel; LogPopupTestCase = g_Settings->m_core.bLogPopupTestCase; @@ -246,8 +250,9 @@ INT_PTR CALLBACK DlgLogConfigProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM LogPopupTestCase = true; } - g_Settings->m_core.LoggedModules[0] = LoggedModules[0]; - g_Settings->m_core.LoggedModules[1] = LoggedModules[1]; + for (unsigned i = 0; i < NUM_INTEGERS_LOG; ++i) { + g_Settings->m_core.LoggedModules[i] = LoggedModules[i]; + } g_Settings->m_core.LogLevel = LogLevel; g_Settings->m_core.bLogPopupTestCase = LogPopupTestCase;