[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