* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include <regedit.h>
+#include "regedit.h"
/********************************************************************************
* Global and Local Variables:
return TRUE;
}
+#define LOADHIVE_KEYNAMELENGTH 128
+
static INT_PTR CALLBACK LoadHive_KeyNameInHookProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static LPWSTR sKey = NULL;
- static INT sLength = 0;
switch(uMsg)
{
case WM_INITDIALOG:
sKey = (LPWSTR)lParam;
- sLength = 128; /* FIXME: Ugly hack! */
+ break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
- if(GetDlgItemTextW(hWndDlg, IDC_EDIT_KEY, sKey, sLength))
+ if(GetDlgItemTextW(hWndDlg, IDC_EDIT_KEY, sKey, LOADHIVE_KEYNAMELENGTH))
return EndDialog(hWndDlg, -1);
else
return EndDialog(hWndDlg, 0);
OPENFILENAME ofn;
WCHAR Caption[128];
LPCWSTR pszKeyPath;
- WCHAR xPath[128];
+ WCHAR xPath[LOADHIVE_KEYNAMELENGTH];
HKEY hRootKey;
WCHAR Filter[1024];
FILTERPAIR filter;
/* now load the hive */
if (GetOpenFileName(&ofn))
{
- if(DialogBoxParamW(hInst, MAKEINTRESOURCEW(IDD_LOADHIVE), hWnd, &LoadHive_KeyNameInHookProc, (LPARAM)xPath))
+ if (DialogBoxParamW(hInst, MAKEINTRESOURCEW(IDD_LOADHIVE), hWnd,
+ &LoadHive_KeyNameInHookProc, (LPARAM)xPath))
{
LONG regLoadResult;
{
/* Look at the extension of the file to determine its type */
if (ofn.nFileExtension >= 1 &&
- wcsicmp(ofn.lpstrFile + ofn.nFileExtension, L"reg") == 0) /* REGEDIT4 or Windows Registry Editor Version 5.00 */
+ _wcsicmp(ofn.lpstrFile + ofn.nFileExtension, L"reg") == 0) /* REGEDIT4 or Windows Registry Editor Version 5.00 */
{
/* Open the file */
FILE* fp = _wfopen(ofn.lpstrFile, L"r");
cbData = sizeof(WCHAR);
break;
case REG_MULTI_SZ:
- cbData = sizeof(WCHAR) * 2;
+ /*
+ * WARNING: An empty multi-string has only one null char.
+ * Indeed, multi-strings are built in the following form:
+ * str1\0str2\0...strN\0\0
+ * where each strI\0 is a null-terminated string, and it
+ * ends with a terminating empty string.
+ * Therefore an empty multi-string contains only the terminating
+ * empty string, that is, one null char.
+ */
+ cbData = sizeof(WCHAR);
break;
- case REG_QWORD:
- cbData = sizeof(DWORD) * 2;
+ case REG_QWORD: /* REG_QWORD_LITTLE_ENDIAN */
+ cbData = sizeof(DWORDLONG); // == sizeof(DWORD) * 2;
break;
default:
cbData = 0;
if ((LOWORD(wParam) >= ID_FAVORITES_MIN) && (LOWORD(wParam) <= ID_FAVORITES_MAX))
{
HMENU hMenu;
- MENUITEMINFO mii;
+ MENUITEMINFOW mii;
WCHAR szFavorite[512];
hMenu = GetSubMenu(GetMenu(hWnd), FAVORITES_MENU_POSITION);