[PATCH 1/2] regedit: Merge header checks from processRegLinesA/W() to their caller
Hugh McMaster
hugh.mcmaster at outlook.com
Fri May 5 04:42:21 CDT 2017
Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>
---
programs/regedit/regproc.c | 62 ++++++++++++++++++++++++----------------------
1 file changed, 32 insertions(+), 30 deletions(-)
diff --git a/programs/regedit/regproc.c b/programs/regedit/regproc.c
index a65f879..5a39274 100644
--- a/programs/regedit/regproc.c
+++ b/programs/regedit/regproc.c
@@ -745,26 +745,9 @@ cleanup:
return NULL;
}
-static BOOL processRegLinesA(FILE *fp, WCHAR *(*get_line)(FILE *), char *two_chars)
+static BOOL processRegLinesA(FILE *fp, WCHAR *(*get_line)(FILE *), int reg_version)
{
- WCHAR *line, *header;
- int reg_version;
-
- line = get_line(fp);
-
- header = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(line) + 3) * sizeof(WCHAR));
- CHECK_ENOUGH_MEMORY(header);
- header[0] = two_chars[0];
- header[1] = two_chars[1];
- lstrcpyW(header + 2, line);
-
- reg_version = parse_file_header(header);
- HeapFree(GetProcessHeap(), 0, header);
- if (reg_version == REG_VERSION_FUZZY || reg_version == REG_VERSION_INVALID)
- {
- get_line(NULL); /* Reset static variables */
- return reg_version == REG_VERSION_FUZZY;
- }
+ WCHAR *line;
while ((line = get_line(fp)))
{
@@ -850,15 +833,6 @@ cleanup:
static BOOL processRegLinesW(FILE *fp, WCHAR *(*get_line)(FILE *))
{
WCHAR *line;
- int reg_version;
-
- line = get_line(fp);
- reg_version = parse_file_header(line);
- if (reg_version == REG_VERSION_FUZZY || reg_version == REG_VERSION_INVALID)
- {
- get_line(NULL); /* Reset static variables */
- return reg_version == REG_VERSION_FUZZY;
- }
while ((line = get_line(fp)))
processRegEntry(line, TRUE);
@@ -1341,14 +1315,42 @@ BOOL export_registry_key(WCHAR *file_name, WCHAR *reg_key_name, DWORD format)
BOOL import_registry_file(FILE* reg_file)
{
BYTE s[2];
+ BOOL is_unicode;
+ WCHAR *(*get_line)(FILE *);
+ WCHAR *line, *header;
+ int reg_version;
if (!reg_file || (fread(s, 2, 1, reg_file) != 1))
return FALSE;
- if (s[0] == 0xff && s[1] == 0xfe)
+ is_unicode = (s[0] == 0xff && s[1] == 0xfe);
+ get_line = is_unicode ? get_lineW : get_lineA;
+
+ line = get_line(reg_file);
+
+ if (!is_unicode)
+ {
+ header = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(line) + 3) * sizeof(WCHAR));
+ CHECK_ENOUGH_MEMORY(header);
+ header[0] = s[0];
+ header[1] = s[1];
+ lstrcpyW(header + 2, line);
+ }
+
+ reg_version = parse_file_header(is_unicode ? line : header);
+
+ if (!is_unicode) HeapFree(GetProcessHeap(), 0, header);
+
+ if (reg_version == REG_VERSION_FUZZY || reg_version == REG_VERSION_INVALID)
+ {
+ get_line(NULL); /* Reset static variables */
+ return reg_version == REG_VERSION_FUZZY;
+ }
+
+ if (is_unicode)
return processRegLinesW(reg_file, get_lineW);
else
- return processRegLinesA(reg_file, get_lineA, (char *)s);
+ return processRegLinesA(reg_file, get_lineA, reg_version);
}
/******************************************************************************
--
2.7.4
More information about the wine-patches
mailing list