Signed-off-by: Hugh McMaster hugh.mcmaster@outlook.com --- programs/reg/delete.c | 61 +++++++++++++++++++++++++++++++++++++++++-- programs/reg/reg.c | 22 +++++----------- programs/reg/reg.h | 3 +-- 3 files changed, 67 insertions(+), 19 deletions(-)
diff --git a/programs/reg/delete.c b/programs/reg/delete.c index c102fb4ad53..1f3755b3365 100644 --- a/programs/reg/delete.c +++ b/programs/reg/delete.c @@ -18,8 +18,8 @@
#include "reg.h"
-int reg_delete(HKEY root, WCHAR *path, WCHAR *key_name, WCHAR *value_name, - BOOL value_empty, BOOL value_all, BOOL force) +static int run_delete(HKEY root, WCHAR *path, WCHAR *key_name, WCHAR *value_name, + BOOL value_empty, BOOL value_all, BOOL force) { HKEY key;
@@ -105,3 +105,60 @@ int reg_delete(HKEY root, WCHAR *path, WCHAR *key_name, WCHAR *value_name, output_message(STRING_SUCCESS); return 0; } + +int reg_delete(int argc, WCHAR *argvW[]) +{ + HKEY root; + WCHAR *path, *key_name, *value_name = NULL; + BOOL value_all = FALSE, value_empty = FALSE, force = FALSE; + int i; + + if (!parse_registry_key(argvW[2], &root, &path, &key_name)) + return 1; + + for (i = 3; i < argc; i++) + { + if (argvW[i][0] == '/' || argvW[i][0] == '-') + { + WCHAR *str = &argvW[i][1]; + + if (!lstrcmpiW(str, L"va")) + { + if (value_all) goto invalid; + value_all = TRUE; + continue; + } + else if (!lstrcmpiW(str, L"ve")) + { + if (value_empty) goto invalid; + value_empty = TRUE; + continue; + } + else if (!str[0] || str[1]) + goto invalid; + + switch (towlower(*str)) + { + case 'v': + if (value_name || !(value_name = argvW[++i])) + goto invalid; + break; + case 'f': + if (force) goto invalid; + force = TRUE; + break; + default: + goto invalid; + } + } + } + + if ((value_name && value_empty) || (value_name && value_all) || (value_empty && value_all)) + goto invalid; + + return run_delete(root, path, key_name, value_name, value_empty, value_all, force); + +invalid: + output_message(STRING_INVALID_CMDLINE); + return 1; +} diff --git a/programs/reg/reg.c b/programs/reg/reg.c index 88889205ca7..9f2b4b53a04 100644 --- a/programs/reg/reg.c +++ b/programs/reg/reg.c @@ -333,11 +333,10 @@ static enum operations get_operation(const WCHAR *str, int *op_help)
int __cdecl wmain(int argc, WCHAR *argvW[]) { - int i, op, op_help, ret; - static const WCHAR switchVAW[] = {'v','a',0}; + int i, op, op_help; static const WCHAR switchVEW[] = {'v','e',0}; WCHAR *key_name, *path, *value_name = NULL, *type = NULL, *data = NULL, separator = '\0'; - BOOL value_empty = FALSE, value_all = FALSE, force = FALSE; + BOOL value_empty = FALSE, force = FALSE; HKEY root;
if (argc == 1) @@ -374,6 +373,9 @@ int __cdecl wmain(int argc, WCHAR *argvW[]) return 0; }
+ if (op == REG_DELETE) + return reg_delete(argc, argvW); + if (op == REG_EXPORT) return reg_export(argc, argvW);
@@ -397,11 +399,6 @@ int __cdecl wmain(int argc, WCHAR *argvW[]) value_empty = TRUE; continue; } - else if (!lstrcmpiW(ptr, switchVAW)) - { - value_all = TRUE; - continue; - } else if (!ptr[0] || ptr[1]) { output_message(STRING_INVALID_CMDLINE); @@ -450,16 +447,11 @@ int __cdecl wmain(int argc, WCHAR *argvW[]) } }
- if ((value_name && value_empty) || (value_name && value_all) || (value_empty && value_all)) + if (value_name && value_empty) { output_message(STRING_INVALID_CMDLINE); return 1; }
- if (op == REG_ADD) - ret = reg_add(root, path, value_name, value_empty, type, separator, data, force); - else - ret = reg_delete(root, path, key_name, value_name, value_empty, value_all, force); - - return ret; + return reg_add(root, path, value_name, value_empty, type, separator, data, force); } diff --git a/programs/reg/reg.h b/programs/reg/reg.h index e1e4804d19d..e4ee13eca6e 100644 --- a/programs/reg/reg.h +++ b/programs/reg/reg.h @@ -47,8 +47,7 @@ int reg_add(HKEY root, WCHAR *path, WCHAR *value_name, BOOL value_empty, WCHAR *type, WCHAR separator, WCHAR *data, BOOL force);
/* delete.c */ -int reg_delete(HKEY root, WCHAR *path, WCHAR *key_name, WCHAR *value_name, - BOOL value_empty, BOOL value_all, BOOL force); +int reg_delete(int argc, WCHAR *argvW[]);
/* export.c */ int reg_export(int argc, WCHAR *argvW[]);
Signed-off-by: Hugh McMaster hugh.mcmaster@outlook.com --- programs/reg/add.c | 67 +++++++++++++++++++++++++++++++++++-- programs/reg/reg.c | 82 +++------------------------------------------- programs/reg/reg.h | 3 +- 3 files changed, 71 insertions(+), 81 deletions(-)
diff --git a/programs/reg/add.c b/programs/reg/add.c index 3d0a509b4f0..672ec19ef98 100644 --- a/programs/reg/add.c +++ b/programs/reg/add.c @@ -149,8 +149,8 @@ static LPBYTE get_regdata(const WCHAR *data, DWORD reg_type, WCHAR separator, DW return out_data; }
-int reg_add(HKEY root, WCHAR *path, WCHAR *value_name, BOOL value_empty, - WCHAR *type, WCHAR separator, WCHAR *data, BOOL force) +static int run_add(HKEY root, WCHAR *path, WCHAR *value_name, BOOL value_empty, + WCHAR *type, WCHAR separator, WCHAR *data, BOOL force) { HKEY key;
@@ -208,3 +208,66 @@ int reg_add(HKEY root, WCHAR *path, WCHAR *value_name, BOOL value_empty,
return 0; } + +int reg_add(int argc, WCHAR *argvW[]) +{ + HKEY root; + WCHAR *path, *key_name, *value_name = NULL, *type = NULL, *data = NULL, separator = '\0'; + BOOL value_empty = FALSE, force = FALSE; + int i; + + if (!parse_registry_key(argvW[2], &root, &path, &key_name)) + return 1; + + for (i = 3; i < argc; i++) + { + if (argvW[i][0] == '/' || argvW[i][0] == '-') + { + WCHAR *str = &argvW[i][1]; + + if (!lstrcmpiW(str, L"ve")) + { + value_empty = TRUE; + continue; + } + else if (!str[0] || str[1]) + goto invalid; + + switch (towlower(*str)) + { + case 'v': + if (value_name || !(value_name = argvW[++i])) + goto invalid; + break; + case 't': + if (type || !(type = argvW[++i])) + goto invalid; + break; + case 'd': + if (data || !(data = argvW[++i])) + goto invalid; + break; + case 's': + str = argvW[++i]; + if (!str || lstrlenW(str) != 1) + goto invalid; + separator = str[0]; + break; + case 'f': + force = TRUE; + break; + default: + goto invalid; + } + } + } + + if (value_name && value_empty) + goto invalid; + + return run_add(root, path, value_name, value_empty, type, separator, data, force); + +invalid: + output_message(STRING_INVALID_CMDLINE); + return 1; +} diff --git a/programs/reg/reg.c b/programs/reg/reg.c index 9f2b4b53a04..e419799676f 100644 --- a/programs/reg/reg.c +++ b/programs/reg/reg.c @@ -333,11 +333,7 @@ static enum operations get_operation(const WCHAR *str, int *op_help)
int __cdecl wmain(int argc, WCHAR *argvW[]) { - int i, op, op_help; - static const WCHAR switchVEW[] = {'v','e',0}; - WCHAR *key_name, *path, *value_name = NULL, *type = NULL, *data = NULL, separator = '\0'; - BOOL value_empty = FALSE, force = FALSE; - HKEY root; + int op, op_help;
if (argc == 1) { @@ -373,6 +369,9 @@ int __cdecl wmain(int argc, WCHAR *argvW[]) return 0; }
+ if (op == REG_ADD) + return reg_add(argc, argvW); + if (op == REG_DELETE) return reg_delete(argc, argvW);
@@ -382,76 +381,5 @@ int __cdecl wmain(int argc, WCHAR *argvW[]) if (op == REG_IMPORT) return reg_import(argc, argvW);
- if (op == REG_QUERY) - return reg_query(argc, argvW); - - if (!parse_registry_key(argvW[2], &root, &path, &key_name)) - return 1; - - for (i = 3; i < argc; i++) - { - if (argvW[i][0] == '/' || argvW[i][0] == '-') - { - WCHAR *ptr = &argvW[i][1]; - - if (!lstrcmpiW(ptr, switchVEW)) - { - value_empty = TRUE; - continue; - } - else if (!ptr[0] || ptr[1]) - { - output_message(STRING_INVALID_CMDLINE); - return 1; - } - - switch(towlower(argvW[i][1])) - { - case 'v': - if (value_name || !(value_name = argvW[++i])) - { - output_message(STRING_INVALID_CMDLINE); - return 1; - } - break; - case 't': - if (type || !(type = argvW[++i])) - { - output_message(STRING_INVALID_CMDLINE); - return 1; - } - break; - case 'd': - if (data || !(data = argvW[++i])) - { - output_message(STRING_INVALID_CMDLINE); - return 1; - } - break; - case 's': - ptr = argvW[++i]; - if (!ptr || lstrlenW(ptr) != 1) - { - output_message(STRING_INVALID_CMDLINE); - return 1; - } - separator = ptr[0]; - break; - case 'f': - force = TRUE; - break; - default: - output_message(STRING_INVALID_CMDLINE); - return 1; - } - } - } - - if (value_name && value_empty) - { - output_message(STRING_INVALID_CMDLINE); - return 1; - } - - return reg_add(root, path, value_name, value_empty, type, separator, data, force); + return reg_query(argc, argvW); } diff --git a/programs/reg/reg.h b/programs/reg/reg.h index e4ee13eca6e..3525bed75b8 100644 --- a/programs/reg/reg.h +++ b/programs/reg/reg.h @@ -43,8 +43,7 @@ BOOL parse_registry_key(const WCHAR *key, HKEY *root, WCHAR **path, WCHAR **long BOOL is_switch(const WCHAR *s, const WCHAR c);
/* add.c */ -int reg_add(HKEY root, WCHAR *path, WCHAR *value_name, BOOL value_empty, - WCHAR *type, WCHAR separator, WCHAR *data, BOOL force); +int reg_add(int arc, WCHAR *argvW[]);
/* delete.c */ int reg_delete(int argc, WCHAR *argvW[]);
Signed-off-by: Hugh McMaster hugh.mcmaster@outlook.com --- programs/reg/add.c | 4 +++- programs/reg/tests/add.c | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/programs/reg/add.c b/programs/reg/add.c index 672ec19ef98..29ac0e88af5 100644 --- a/programs/reg/add.c +++ b/programs/reg/add.c @@ -227,6 +227,7 @@ int reg_add(int argc, WCHAR *argvW[])
if (!lstrcmpiW(str, L"ve")) { + if (value_empty) goto invalid; value_empty = TRUE; continue; } @@ -249,11 +250,12 @@ int reg_add(int argc, WCHAR *argvW[]) break; case 's': str = argvW[++i]; - if (!str || lstrlenW(str) != 1) + if (separator || !str || lstrlenW(str) != 1) goto invalid; separator = str[0]; break; case 'f': + if (force) goto invalid; force = TRUE; break; default: diff --git a/programs/reg/tests/add.c b/programs/reg/tests/add.c index f5d473e8887..e1e7a478502 100644 --- a/programs/reg/tests/add.c +++ b/programs/reg/tests/add.c @@ -234,7 +234,7 @@ static void test_add(void) ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
run_reg_exe("reg add HKCU\" KEY_BASE " /f /f", &r); - todo_wine ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r); + ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
open_key(HKEY_CURRENT_USER, KEY_BASE, 0, &hkey);
@@ -295,7 +295,7 @@ static void test_add(void) verify_reg(hkey, NULL, REG_SZ, "", 1, 0);
run_reg_exe("reg add HKCU\" KEY_BASE " /ve /f /ve", &r); - todo_wine ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r); + ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
run_reg_exe("reg add HKEY_CURRENT_USER\" KEY_BASE " /ve /d WineTEST /f", &r); ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
Signed-off-by: Hugh McMaster hugh.mcmaster@outlook.com --- programs/reg/add.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/programs/reg/add.c b/programs/reg/add.c index 29ac0e88af5..e1fd2223716 100644 --- a/programs/reg/add.c +++ b/programs/reg/add.c @@ -154,7 +154,8 @@ static int run_add(HKEY root, WCHAR *path, WCHAR *value_name, BOOL value_empty, { HKEY key;
- if (RegCreateKeyW(root, path, &key) != ERROR_SUCCESS) + if (RegCreateKeyExW(root, path, 0, NULL, REG_OPTION_NON_VOLATILE, + KEY_READ|KEY_WRITE, NULL, &key, NULL)) { output_message(STRING_INVALID_KEY); return 1;
Signed-off-by: Hugh McMaster hugh.mcmaster@outlook.com --- programs/reg/query.c | 18 +++++------- programs/reg/reg.c | 68 +++++++++++++------------------------------- 2 files changed, 27 insertions(+), 59 deletions(-)
diff --git a/programs/reg/query.c b/programs/reg/query.c index c8277cd7114..961d926a10b 100644 --- a/programs/reg/query.c +++ b/programs/reg/query.c @@ -48,12 +48,11 @@ static WCHAR *reg_data_to_wchar(DWORD type, const BYTE *src, DWORD size_bytes) case REG_BINARY: { WCHAR *ptr; - static const WCHAR fmt[] = {'%','0','2','X',0};
buffer = malloc((size_bytes * 2 + 1) * sizeof(WCHAR)); ptr = buffer; for (i = 0; i < size_bytes; i++) - ptr += swprintf(ptr, 3, fmt, src[i]); + ptr += swprintf(ptr, 3, L"%02X", src[i]); break; } case REG_DWORD: @@ -61,10 +60,9 @@ static WCHAR *reg_data_to_wchar(DWORD type, const BYTE *src, DWORD size_bytes) case REG_DWORD_BIG_ENDIAN: { const int zero_x_dword = 10; - static const WCHAR fmt[] = {'0','x','%','x',0};
buffer = malloc((zero_x_dword + 1) * sizeof(WCHAR)); - swprintf(buffer, zero_x_dword + 1, fmt, *(DWORD *)src); + swprintf(buffer, zero_x_dword + 1, L"0x%x", *(DWORD *)src); break; } case REG_MULTI_SZ: @@ -102,11 +100,11 @@ static WCHAR *reg_data_to_wchar(DWORD type, const BYTE *src, DWORD size_bytes) return buffer; }
-static const WCHAR newlineW[] = {'\n',0}; +static const WCHAR *newlineW = L"\n";
static void output_value(const WCHAR *value_name, DWORD type, BYTE *data, DWORD data_size) { - static const WCHAR fmt[] = {' ',' ',' ',' ','%','1',0}; + static const WCHAR *fmt = L" %1"; WCHAR defval[32]; WCHAR *reg_data;
@@ -142,7 +140,7 @@ static int query_value(HKEY key, WCHAR *value_name, WCHAR *path, BOOL recurse) DWORD subkey_len; DWORD type, path_len, i; BYTE *data; - WCHAR fmt[] = {'%','1','\n',0}; + static const WCHAR *fmt = L"%1\n"; WCHAR *subkey_name, *subkey_path; HKEY subkey;
@@ -219,13 +217,11 @@ static int query_all(HKEY key, WCHAR *path, BOOL recurse) DWORD max_data_bytes = 2048, data_size; DWORD subkey_len; DWORD i, type, path_len; - WCHAR fmt[] = {'%','1','\n',0}; - WCHAR fmt_path[] = {'%','1','\','%','2','\n',0}; WCHAR *value_name, *subkey_name, *subkey_path; BYTE *data; HKEY subkey;
- output_string(fmt, path); + output_string(L"%1\n", path);
value_name = malloc(max_value_len * sizeof(WCHAR)); data = malloc(max_data_bytes); @@ -284,7 +280,7 @@ static int query_all(HKEY key, WCHAR *path, BOOL recurse) } free(subkey_path); } - else output_string(fmt_path, path, subkey_name); + else output_string(L"%1\%2\n", path, subkey_name); i++; } else break; diff --git a/programs/reg/reg.c b/programs/reg/reg.c index e419799676f..10aaabf92da 100644 --- a/programs/reg/reg.c +++ b/programs/reg/reg.c @@ -21,17 +21,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(reg);
-static const WCHAR short_hklm[] = {'H','K','L','M',0}; -static const WCHAR short_hkcu[] = {'H','K','C','U',0}; -static const WCHAR short_hkcr[] = {'H','K','C','R',0}; -static const WCHAR short_hku[] = {'H','K','U',0}; -static const WCHAR short_hkcc[] = {'H','K','C','C',0}; -static const WCHAR long_hklm[] = {'H','K','E','Y','_','L','O','C','A','L','_','M','A','C','H','I','N','E',0}; -static const WCHAR long_hkcu[] = {'H','K','E','Y','_','C','U','R','R','E','N','T','_','U','S','E','R',0}; -static const WCHAR long_hkcr[] = {'H','K','E','Y','_','C','L','A','S','S','E','S','_','R','O','O','T',0}; -static const WCHAR long_hku[] = {'H','K','E','Y','_','U','S','E','R','S',0}; -static const WCHAR long_hkcc[] = {'H','K','E','Y','_','C','U','R','R','E','N','T','_','C','O','N','F','I','G',0}; - static const struct { HKEY key; @@ -40,32 +29,23 @@ static const struct } root_rels[] = { - {HKEY_LOCAL_MACHINE, short_hklm, long_hklm}, - {HKEY_CURRENT_USER, short_hkcu, long_hkcu}, - {HKEY_CLASSES_ROOT, short_hkcr, long_hkcr}, - {HKEY_USERS, short_hku, long_hku}, - {HKEY_CURRENT_CONFIG, short_hkcc, long_hkcc}, + {HKEY_LOCAL_MACHINE, L"HKLM", L"HKEY_LOCAL_MACHINE"}, + {HKEY_CURRENT_USER, L"HKCU", L"HKEY_CURRENT_USER"}, + {HKEY_CLASSES_ROOT, L"HKCR", L"HKEY_CLASSES_ROOT"}, + {HKEY_USERS, L"HKU", L"HKEY_USERS"}, + {HKEY_CURRENT_CONFIG, L"HKCC", L"HKEY_CURRENT_CONFIG"}, };
-static const WCHAR type_none[] = {'R','E','G','_','N','O','N','E',0}; -static const WCHAR type_sz[] = {'R','E','G','_','S','Z',0}; -static const WCHAR type_expand_sz[] = {'R','E','G','_','E','X','P','A','N','D','_','S','Z',0}; -static const WCHAR type_binary[] = {'R','E','G','_','B','I','N','A','R','Y',0}; -static const WCHAR type_dword[] = {'R','E','G','_','D','W','O','R','D',0}; -static const WCHAR type_dword_le[] = {'R','E','G','_','D','W','O','R','D','_','L','I','T','T','L','E','_','E','N','D','I','A','N',0}; -static const WCHAR type_dword_be[] = {'R','E','G','_','D','W','O','R','D','_','B','I','G','_','E','N','D','I','A','N',0}; -static const WCHAR type_multi_sz[] = {'R','E','G','_','M','U','L','T','I','_','S','Z',0}; - const struct reg_type_rels type_rels[] = { - {REG_NONE, type_none}, - {REG_SZ, type_sz}, - {REG_EXPAND_SZ, type_expand_sz}, - {REG_BINARY, type_binary}, - {REG_DWORD, type_dword}, - {REG_DWORD_LITTLE_ENDIAN, type_dword_le}, - {REG_DWORD_BIG_ENDIAN, type_dword_be}, - {REG_MULTI_SZ, type_multi_sz}, + {REG_NONE, L"REG_NONE"}, + {REG_SZ, L"REG_SZ"}, + {REG_EXPAND_SZ, L"REG_EXPAND_SZ"}, + {REG_BINARY, L"REG_BINARY"}, + {REG_DWORD, L"REG_DWORD"}, + {REG_DWORD_LITTLE_ENDIAN, L"REG_DWORD_LITTLE_ENDIAN"}, + {REG_DWORD_BIG_ENDIAN, L"REG_DWORD_BIG_ENDIAN"}, + {REG_MULTI_SZ, L"REG_MULTI_SZ"}, };
void output_writeconsole(const WCHAR *str, DWORD wlen) @@ -216,10 +196,9 @@ static BOOL sane_path(const WCHAR *key) WCHAR *build_subkey_path(WCHAR *path, DWORD path_len, WCHAR *subkey_name, DWORD subkey_len) { WCHAR *subkey_path; - static const WCHAR fmt[] = {'%','s','\','%','s',0};
subkey_path = malloc((path_len + subkey_len + 2) * sizeof(WCHAR)); - swprintf(subkey_path, path_len + subkey_len + 2, fmt, path, subkey_name); + swprintf(subkey_path, path_len + subkey_len + 2, L"%s\%s", path, subkey_name);
return subkey_path; } @@ -228,7 +207,6 @@ static WCHAR *get_long_key(HKEY root, WCHAR *path) { DWORD i, array_size = ARRAY_SIZE(root_rels), len; WCHAR *long_key; - WCHAR fmt[] = {'%','s','\','%','s',0};
for (i = 0; i < array_size; i++) { @@ -247,7 +225,7 @@ static WCHAR *get_long_key(HKEY root, WCHAR *path)
len += lstrlenW(path) + 1; /* add one for the backslash */ long_key = malloc((len + 1) * sizeof(WCHAR)); - swprintf(long_key, len + 1, fmt, root_rels[i].long_name, path); + swprintf(long_key, len + 1, L"%s\%s", root_rels[i].long_name, path); return long_key; }
@@ -301,19 +279,13 @@ static enum operations get_operation(const WCHAR *str, int *op_help) { struct op_info { const WCHAR *op; int id; int help_id; };
- static const WCHAR add[] = {'a','d','d',0}; - static const WCHAR delete[] = {'d','e','l','e','t','e',0}; - static const WCHAR export[] = {'e','x','p','o','r','t',0}; - static const WCHAR import[] = {'i','m','p','o','r','t',0}; - static const WCHAR query[] = {'q','u','e','r','y',0}; - static const struct op_info op_array[] = { - { add, REG_ADD, STRING_ADD_USAGE }, - { delete, REG_DELETE, STRING_DELETE_USAGE }, - { export, REG_EXPORT, STRING_EXPORT_USAGE }, - { import, REG_IMPORT, STRING_IMPORT_USAGE }, - { query, REG_QUERY, STRING_QUERY_USAGE }, + { L"add", REG_ADD, STRING_ADD_USAGE }, + { L"delete", REG_DELETE, STRING_DELETE_USAGE }, + { L"export", REG_EXPORT, STRING_EXPORT_USAGE }, + { L"import", REG_IMPORT, STRING_IMPORT_USAGE }, + { L"query", REG_QUERY, STRING_QUERY_USAGE }, { NULL, -1, 0 } };
Signed-off-by: Hugh McMaster hugh.mcmaster@outlook.com --- programs/reg/import.c | 36 ++++++++++++------------------------ 1 file changed, 12 insertions(+), 24 deletions(-)
diff --git a/programs/reg/import.c b/programs/reg/import.c index 93d6d46aef9..3ce8fce7394 100644 --- a/programs/reg/import.c +++ b/programs/reg/import.c @@ -245,18 +245,13 @@ static BOOL parse_data_type(struct parser *parser, WCHAR **line) { struct data_type { const WCHAR *tag; int len; int type; int parse_type; };
- static const WCHAR quote[] = {'"'}; - static const WCHAR hex[] = {'h','e','x',':'}; - static const WCHAR dword[] = {'d','w','o','r','d',':'}; - static const WCHAR hexp[] = {'h','e','x','('}; - static const struct data_type data_types[] = { - /* tag len type parse type */ - { quote, 1, REG_SZ, REG_SZ }, - { hex, 4, REG_BINARY, REG_BINARY }, - { dword, 6, REG_DWORD, REG_DWORD }, - { hexp, 4, -1, REG_BINARY }, /* REG_NONE, REG_EXPAND_SZ, REG_MULTI_SZ */ - { NULL, 0, 0, 0 } + /* tag len type parse type */ + { L""", 1, REG_SZ, REG_SZ }, + { L"hex:", 4, REG_BINARY, REG_BINARY }, + { L"dword:", 6, REG_DWORD, REG_DWORD }, + { L"hex(", 4, -1, REG_BINARY }, /* REG_NONE, REG_EXPAND_SZ, REG_MULTI_SZ */ + { NULL, 0, 0, 0 } };
const struct data_type *ptr; @@ -443,21 +438,17 @@ enum reg_versions {
static enum reg_versions parse_file_header(const WCHAR *s) { - static const WCHAR header_31[] = {'R','E','G','E','D','I','T',0}; - static const WCHAR header_40[] = {'R','E','G','E','D','I','T','4',0}; - static const WCHAR header_50[] = {'W','i','n','d','o','w','s',' ', - 'R','e','g','i','s','t','r','y',' ','E','d','i','t','o','r',' ', - 'V','e','r','s','i','o','n',' ','5','.','0','0',0}; + static const WCHAR *header_31 = L"REGEDIT";
while (*s == ' ' || *s == '\t') s++;
if (!lstrcmpW(s, header_31)) return REG_VERSION_31;
- if (!lstrcmpW(s, header_40)) + if (!lstrcmpW(s, L"REGEDIT4")) return REG_VERSION_40;
- if (!lstrcmpW(s, header_50)) + if (!lstrcmpW(s, L"Windows Registry Editor Version 5.00")) return REG_VERSION_50;
/* The Windows version accepts registry file headers beginning with "REGEDIT" and ending @@ -511,13 +502,12 @@ static WCHAR *header_state(struct parser *parser, WCHAR *pos) static WCHAR *parse_win31_line_state(struct parser *parser, WCHAR *pos) { WCHAR *line, *value; - static WCHAR hkcr[] = {'H','K','E','Y','_','C','L','A','S','S','E','S','_','R','O','O','T'}; unsigned int key_end = 0;
if (!(line = get_line(parser->file))) return NULL;
- if (wcsncmp(line, hkcr, ARRAY_SIZE(hkcr))) + if (wcsncmp(line, L"HKEY_CLASSES_ROOT", 17)) /* "HKEY_CLASSES_ROOT" without NUL */ return line;
/* get key name */ @@ -948,8 +938,7 @@ static WCHAR *get_lineW(FILE *fp)
while (next) { - static const WCHAR line_endings[] = {'\r','\n',0}; - WCHAR *p = wcspbrk(line, line_endings); + WCHAR *p = wcspbrk(line, L"\r\n"); if (!p) { size_t len, count; @@ -986,7 +975,6 @@ int reg_import(int argc, WCHAR *argvW[]) { WCHAR *filename, *pos; FILE *fp; - static const WCHAR rb_mode[] = {'r','b',0}; BYTE s[2]; struct parser parser;
@@ -999,7 +987,7 @@ int reg_import(int argc, WCHAR *argvW[])
filename = argvW[2];
- fp = _wfopen(filename, rb_mode); + fp = _wfopen(filename, L"rb"); if (!fp) { output_message(STRING_FILE_NOT_FOUND, filename);