X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=base%2Fapplications%2Fregedit%2Fsettings.c;h=5d82a64625bceba94b6829e7f88a1301e15667c8;hp=8f05f4b1ea623dbd7a2a588ec15d0bee2b8612c9;hb=HEAD;hpb=73d72624b097cb6c2f8481e75e99ed28ccbe907c diff --git a/base/applications/regedit/settings.c b/base/applications/regedit/settings.c index 8f05f4b1ea6..c82a3a0520d 100644 --- a/base/applications/regedit/settings.c +++ b/base/applications/regedit/settings.c @@ -22,8 +22,9 @@ #include "regedit.h" const WCHAR g_szGeneralRegKey[] = L"Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Regedit"; +DECLSPEC_IMPORT ULONG WINAPIV DbgPrint(PCCH Format,...); -/* +/* VV,VV,VV,VV,WA,WA,WA,WA,WB,WB,WB,WB,R1,R1,R1,R1 R2,R2,R2,R2,R3,R3,R3,R3,R4,R4,R4,r4,LL,LL,LL,LL TT,TT,TT,TT,RR,RR,RR,RR,BB,BB,BB,BB,SS,SS,SS,SS @@ -66,6 +67,7 @@ extern void LoadSettings(void) { RegistryBinaryConfig tConfig; DWORD iBufferSize = sizeof(tConfig); + BOOL bVisible = FALSE; if (RegQueryValueExW(hKey, L"View", NULL, NULL, (LPBYTE)&tConfig, &iBufferSize) == ERROR_SUCCESS) { @@ -89,19 +91,21 @@ extern void LoadSettings(void) /* Apply program window settings */ tConfig.tPlacement.length = sizeof(WINDOWPLACEMENT); - if (SetWindowPlacement(hFrameWnd, &tConfig.tPlacement) == FALSE) - /* In case we fail, show normal */ - ShowWindow(hFrameWnd, SW_SHOWNORMAL); + bVisible = SetWindowPlacement(hFrameWnd, &tConfig.tPlacement); } } + /* In case we fail to restore the window, or open the key, show normal */ + if (!bVisible) + ShowWindow(hFrameWnd, SW_SHOWNORMAL); + /* Restore key position */ - if (QueryStringValue(HKEY_CURRENT_USER, g_szGeneralRegKey, L"LastKey", szBuffer, COUNT_OF(szBuffer)) == ERROR_SUCCESS) + if (QueryStringValue(HKEY_CURRENT_USER, g_szGeneralRegKey, L"LastKey", szBuffer, ARRAY_SIZE(szBuffer)) == ERROR_SUCCESS) { SelectNode(g_pChildWnd->hTreeWnd, szBuffer); } - RegCloseKey(hKey); + RegCloseKey(hKey); } else { @@ -118,22 +122,31 @@ extern void SaveSettings(void) { RegistryBinaryConfig tConfig; DWORD iBufferSize = sizeof(tConfig); - WCHAR szBuffer[MAX_PATH]; + WCHAR szBuffer[MAX_PATH]; /* FIXME: a complete registry path can be longer than that */ LPCWSTR keyPath, rootName; HKEY hRootKey; /* Save key position */ keyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hRootKey); - if (keyPath) - { - rootName = get_root_key_name(hRootKey); + rootName = get_root_key_name(hRootKey); - /* Load "My Computer" string and complete it */ - LoadStringW(hInst, IDS_MY_COMPUTER, szBuffer, COUNT_OF(szBuffer)); - wcscat(szBuffer, L"\\"); wcscat(szBuffer, rootName); - wcscat(szBuffer, L"\\"); wcscat(szBuffer, keyPath); - - RegSetValueExW(hKey, L"LastKey", 0, REG_SZ, (LPBYTE)szBuffer, (DWORD)wcslen(szBuffer) * sizeof(WCHAR)); + /* Load "My Computer" string and complete it */ + if (LoadStringW(hInst, IDS_MY_COMPUTER, szBuffer, ARRAY_SIZE(szBuffer)) && + SUCCEEDED(StringCbCatW(szBuffer, sizeof(szBuffer), L"\\")) && + SUCCEEDED(StringCbCatW(szBuffer, sizeof(szBuffer), rootName)) && + SUCCEEDED(StringCbCatW(szBuffer, sizeof(szBuffer), L"\\"))) + { + HRESULT hr = S_OK; + if (keyPath) + hr = StringCbCatW(szBuffer, sizeof(szBuffer), keyPath); + if (SUCCEEDED(hr)) + RegSetValueExW(hKey, L"LastKey", 0, REG_SZ, (LPBYTE)szBuffer, (DWORD)wcslen(szBuffer) * sizeof(WCHAR)); + else + DbgPrint("err: (%s:%d): Buffer not big enough for '%S + %S'\n", __FILE__, __LINE__, rootName, keyPath); + } + else + { + DbgPrint("err: (%s:%d): Buffer not big enough for '%S'\n", __FILE__, __LINE__, rootName); } /* Get statusbar settings */