From: Hugh McMaster hugh.mcmaster@outlook.com
--- programs/regedit/edit.c | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-)
diff --git a/programs/regedit/edit.c b/programs/regedit/edit.c index 44ef45993fd..cbaa797e98d 100644 --- a/programs/regedit/edit.c +++ b/programs/regedit/edit.c @@ -96,6 +96,11 @@ static BOOL update_registry_value(HWND hwndDlg, struct edit_params *params)
switch (params->type) { + case REG_SZ: + case REG_EXPAND_SZ: + params->data = buf; + params->size = (len + 1) * sizeof(WCHAR); + break; case REG_DWORD: params->size = sizeof(DWORD); params->data = malloc(params->size); @@ -129,9 +134,11 @@ static BOOL update_registry_value(HWND hwndDlg, struct edit_params *params) params->size = j * sizeof(WCHAR); break; } - default: /* REG_SZ, REG_EXPAND_SZ */ - params->data = buf; - params->size = (len + 1) * sizeof(WCHAR); + default: /* hex data types */ + free(buf); + params->size = SendMessageW(hwndValue, HEM_GETDATA, 0, 0); + params->data = malloc(params->size); + SendMessageW(hwndValue, HEM_GETDATA, (WPARAM)params->size, (LPARAM)params->data); }
ret = RegSetValueExW(params->hkey, params->value_name, 0, params->type, (BYTE *)params->data, params->size); @@ -224,9 +231,7 @@ static INT_PTR CALLBACK modify_dword_dlgproc(HWND hwndDlg, UINT msg, WPARAM wpar static INT_PTR CALLBACK modify_binary_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { struct edit_params *params; - BYTE *data; - LONG size; - LONG lRet; + int ret = 0;
switch(uMsg) { case WM_INITDIALOG: @@ -243,23 +248,10 @@ static INT_PTR CALLBACK modify_binary_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wP switch (LOWORD(wParam)) { case IDOK: params = (struct edit_params *)GetWindowLongPtrW(hwndDlg, DWLP_USER); - size = SendDlgItemMessageW(hwndDlg, IDC_VALUE_DATA, HEM_GETDATA, 0, 0); - data = malloc(size); - - SendDlgItemMessageW(hwndDlg, IDC_VALUE_DATA, HEM_GETDATA, (WPARAM)size, (LPARAM)data); - lRet = RegSetValueExW(params->hkey, params->value_name, 0, params->type, data, size); - free(data); - - if (lRet == ERROR_SUCCESS) - EndDialog(hwndDlg, 1); - else - { - error_code_messagebox(hwndDlg, IDS_SET_VALUE_FAILED); - EndDialog(hwndDlg, 0); - } - return TRUE; + ret = update_registry_value(hwndDlg, params); + /* fall through */ case IDCANCEL: - EndDialog(hwndDlg, 0); + EndDialog(hwndDlg, ret); return TRUE; } }
From: Hugh McMaster hugh.mcmaster@outlook.com
--- programs/regedit/edit.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/programs/regedit/edit.c b/programs/regedit/edit.c index cbaa797e98d..300bfe00d59 100644 --- a/programs/regedit/edit.c +++ b/programs/regedit/edit.c @@ -29,7 +29,6 @@
#include "main.h"
-static const WCHAR* editValueName; static BOOL isDecimal;
struct edit_params @@ -150,6 +149,14 @@ static BOOL update_registry_value(HWND hwndDlg, struct edit_params *params) return !ret; }
+static void set_dlgproc_value_name(HWND hwndDlg, struct edit_params *params) +{ + if (params->value_name) + SetDlgItemTextW(hwndDlg, IDC_VALUE_NAME, params->value_name); + else + SetDlgItemTextW(hwndDlg, IDC_VALUE_NAME, g_pszDefaultValueName); +} + static INT_PTR CALLBACK modify_string_dlgproc(HWND hwndDlg, UINT msg, WPARAM wparam, LPARAM lparam) { struct edit_params *params; @@ -160,7 +167,7 @@ static INT_PTR CALLBACK modify_string_dlgproc(HWND hwndDlg, UINT msg, WPARAM wpa case WM_INITDIALOG: params = (struct edit_params *)lparam; SetWindowLongPtrW(hwndDlg, DWLP_USER, (ULONG_PTR)params); - SetDlgItemTextW(hwndDlg, IDC_VALUE_NAME, editValueName); + set_dlgproc_value_name(hwndDlg, params); SetDlgItemTextW(hwndDlg, IDC_VALUE_DATA, params->data); return TRUE; case WM_COMMAND: @@ -200,7 +207,7 @@ static INT_PTR CALLBACK modify_dword_dlgproc(HWND hwndDlg, UINT msg, WPARAM wpar case WM_INITDIALOG: params = (struct edit_params *)lparam; SetWindowLongPtrW(hwndDlg, DWLP_USER, (ULONG_PTR)params); - SetDlgItemTextW(hwndDlg, IDC_VALUE_NAME, editValueName); + set_dlgproc_value_name(hwndDlg, params); SetDlgItemTextW(hwndDlg, IDC_VALUE_DATA, params->data); CheckRadioButton(hwndDlg, IDC_DWORD_HEX, IDC_DWORD_DEC, IDC_DWORD_HEX); isDecimal = FALSE; @@ -237,10 +244,7 @@ static INT_PTR CALLBACK modify_binary_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wP case WM_INITDIALOG: params = (struct edit_params *)lParam; SetWindowLongPtrW(hwndDlg, DWLP_USER, (ULONG_PTR)params); - if (params->value_name) - SetDlgItemTextW(hwndDlg, IDC_VALUE_NAME, params->value_name); - else - SetDlgItemTextW(hwndDlg, IDC_VALUE_NAME, g_pszDefaultValueName); + set_dlgproc_value_name(hwndDlg, params); SendDlgItemMessageW(hwndDlg, IDC_VALUE_DATA, HEM_SETDATA, (WPARAM)params->size, (LPARAM)params->data); SendDlgItemMessageW(hwndDlg, IDC_VALUE_DATA, WM_SETFONT, (WPARAM) GetStockObject(ANSI_FIXED_FONT), TRUE); return TRUE; @@ -380,8 +384,6 @@ BOOL ModifyValue(HWND hwnd, HKEY hKeyRoot, LPCWSTR keyPath, LPCWSTR valueName) struct edit_params params; BOOL result = FALSE;
- editValueName = valueName ? valueName : g_pszDefaultValueName; - if (RegOpenKeyExW(hKeyRoot, keyPath, 0, KEY_READ | KEY_SET_VALUE, ¶ms.hkey)) { error_code_messagebox(hwnd, IDS_SET_VALUE_FAILED);
From: Hugh McMaster hugh.mcmaster@outlook.com
--- programs/regedit/edit.c | 4 ---- 1 file changed, 4 deletions(-)
diff --git a/programs/regedit/edit.c b/programs/regedit/edit.c index 300bfe00d59..93d7542a6ba 100644 --- a/programs/regedit/edit.c +++ b/programs/regedit/edit.c @@ -143,9 +143,6 @@ static BOOL update_registry_value(HWND hwndDlg, struct edit_params *params) ret = RegSetValueExW(params->hkey, params->value_name, 0, params->type, (BYTE *)params->data, params->size); if (ret) error_code_messagebox(hwndDlg, IDS_SET_VALUE_FAILED);
- free(params->data); - params->data = NULL; - return !ret; }
@@ -427,7 +424,6 @@ BOOL ModifyValue(HWND hwnd, HKEY hKeyRoot, LPCWSTR keyPath, LPCWSTR valueName) int index = SendMessageW(g_pChildWnd->hListWnd, LVM_GETNEXTITEM, -1, MAKELPARAM(LVNI_FOCUSED | LVNI_SELECTED, 0));
- read_value(hwnd, ¶ms); format_value_data(g_pChildWnd->hListWnd, index, params.type, params.data, params.size); }