From: Jonathan Vollebregt Subject: [PATCH v3 7/8] reg.exe: Clean up reg_add Message-Id: <1410019523-29897-7-git-send-email-jnvsor@gmail.com> Date: Sat, 6 Sep 2014 18:05:22 +0200 Adds defaults and checks --- programs/reg/reg.c | 63 ++++++++++++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 33 deletions(-) diff --git a/programs/reg/reg.c b/programs/reg/reg.c index 9b2d46b..3bb09d3 100644 --- a/programs/reg/reg.c +++ b/programs/reg/reg.c @@ -537,25 +537,24 @@ static DWORD print_all_values(const HKEY hkey, const WCHAR *key_name, const BOOL return 0; } -static int reg_add(WCHAR *key_name, WCHAR *value_name, BOOL value_empty, - WCHAR *type, WCHAR separator, WCHAR *data, BOOL force) +static int reg_add( const WCHAR *key_name, const WCHAR *value_name, const BOOL value_empty, + const WCHAR *type, const WCHAR separator, const WCHAR *data, + const BOOL force) { - LPWSTR p; - HKEY root,subkey; + HKEY key; - p = strchrW(key_name,'\\'); - if (!p) + if (value_name && value_empty) { - reg_message(STRING_INVALID_KEY); + reg_message(STRING_INVALID_CMDLINE); return 1; } - p++; - root = path_get_rootkey(key_name); - if (!root) + key = path_get_rootkey(key_name); + if (!key) return 1; - if(RegCreateKeyW(root,p,&subkey)!=ERROR_SUCCESS) + key_name = strchrW(key_name, '\\'); + if (key_name && RegCreateKeyW(key, key_name + 1, &key) != ERROR_SUCCESS) { reg_message(STRING_INVALID_KEY); return 1; @@ -563,44 +562,42 @@ static int reg_add(WCHAR *key_name, WCHAR *value_name, BOOL value_empty, if (value_name || data) { - DWORD reg_type; - DWORD reg_count = 0; - BYTE* reg_data = NULL; + DWORD size, reg_type; + BYTE *data_out; - if (!force) + if (value_name && !value_name[0]) + value_name = NULL; + + if (!force && RegQueryValueW(key, value_name, NULL, NULL) == ERROR_SUCCESS) { - if (RegQueryValueW(subkey,value_name,NULL,NULL)==ERROR_SUCCESS) - { - /* FIXME: Prompt for overwrite */ - } + /* FIXME: Prompt for overwrite */ } - reg_type = wchar_get_type(type); + if(!type) + reg_type = REG_SZ; + else + reg_type = wchar_get_type(type); + if (reg_type == -1) { - RegCloseKey(subkey); + RegCloseKey(key); reg_message(STRING_INVALID_CMDLINE); return 1; } - if (data) + data_out = wchar_get_data(data, reg_type, separator, &size); + if (!data_out) { - reg_data = wchar_get_data(data, reg_type, separator, ®_count); - if (!reg_data) - { - RegCloseKey(subkey); - reg_message(STRING_ERROR); - return 1; - } + RegCloseKey(key); + return 1; } - RegSetValueExW(subkey,value_name,0,reg_type,reg_data,reg_count); - HeapFree(GetProcessHeap(),0,reg_data); + RegSetValueExW(key, value_name, 0, reg_type, data_out, size); + HeapFree(GetProcessHeap(), 0, data_out); } - RegCloseKey(subkey); + RegCloseKey(key); reg_message(STRING_SUCCESS); - return 0; } -- 2.1.0