[PATCH 3/3] regedit: Use a function pointer to read each registry line instead of calling get_lineA/W() directly
Hugh McMaster
hugh.mcmaster at outlook.com
Wed May 3 06:28:36 CDT 2017
Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>
---
programs/regedit/regproc.c | 20 ++++++++++++++------
1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/programs/regedit/regproc.c b/programs/regedit/regproc.c
index 7a37036..a991623 100644
--- a/programs/regedit/regproc.c
+++ b/programs/regedit/regproc.c
@@ -141,6 +141,8 @@ static char* GetMultiByteStringN(const WCHAR* strW, int chars, DWORD* len)
return NULL;
}
+static WCHAR *(*get_line)(FILE *);
+
/******************************************************************************
* Converts a hex representation of a DWORD into a DWORD.
*/
@@ -750,7 +752,7 @@ static BOOL processRegLinesA(FILE *fp, char *two_chars)
WCHAR *line, *header;
int reg_version;
- line = get_lineA(fp);
+ line = get_line(fp);
header = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(line) + 3) * sizeof(WCHAR));
CHECK_ENOUGH_MEMORY(header);
@@ -762,11 +764,11 @@ static BOOL processRegLinesA(FILE *fp, char *two_chars)
HeapFree(GetProcessHeap(), 0, header);
if (reg_version == REG_VERSION_FUZZY || reg_version == REG_VERSION_INVALID)
{
- get_lineA(NULL); /* Reset static variables */
+ get_line(NULL); /* Reset static variables */
return reg_version == REG_VERSION_FUZZY;
}
- while ((line = get_lineA(fp)))
+ while ((line = get_line(fp)))
{
if (reg_version == REG_VERSION_31)
processRegEntry31(line);
@@ -852,15 +854,15 @@ static BOOL processRegLinesW(FILE *fp)
WCHAR *line;
int reg_version;
- line = get_lineW(fp);
+ line = get_line(fp);
reg_version = parse_file_header(line);
if (reg_version == REG_VERSION_FUZZY || reg_version == REG_VERSION_INVALID)
{
- get_lineW(NULL); /* Reset static variables */
+ get_line(NULL); /* Reset static variables */
return reg_version == REG_VERSION_FUZZY;
}
- while ((line = get_lineW(fp)))
+ while ((line = get_line(fp)))
processRegEntry(line, TRUE);
closeKey();
@@ -1346,9 +1348,15 @@ BOOL import_registry_file(FILE* reg_file)
return FALSE;
if (s[0] == 0xff && s[1] == 0xfe)
+ {
+ get_line = &get_lineW;
return processRegLinesW(reg_file);
+ }
else
+ {
+ get_line = &get_lineA;
return processRegLinesA(reg_file, (char *)s);
+ }
}
/******************************************************************************
--
2.7.4
More information about the wine-patches
mailing list