[PATCH v3 7/8] reg.exe: Clean up reg_add
Jonathan Vollebregt
jnvsor at gmail.com
Sat Sep 6 11:05:22 CDT 2014
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
More information about the wine-patches
mailing list