Francois Gouget : regedit: Simplify / clean up export_hkey().

Alexandre Julliard julliard at winehq.org
Wed Nov 12 07:18:50 CST 2008


Module: wine
Branch: master
Commit: 7df722259486931ccaefaeead2bca8d29166be74
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=7df722259486931ccaefaeead2bca8d29166be74

Author: Francois Gouget <fgouget at codeweavers.com>
Date:   Wed Nov 12 11:29:51 2008 +0100

regedit: Simplify / clean up export_hkey().

Avoid unneeded/redundant calls to lstrcatW() and lstrlenW().
Tighten the scope of variables.

---

 programs/regedit/regproc.c |   62 ++++++++++++++++++++-----------------------
 1 files changed, 29 insertions(+), 33 deletions(-)

diff --git a/programs/regedit/regproc.c b/programs/regedit/regproc.c
index 0dda28c..e3e4811 100644
--- a/programs/regedit/regproc.c
+++ b/programs/regedit/regproc.c
@@ -972,7 +972,6 @@ static void export_hkey(FILE *file, HKEY key,
     BOOL more_data;
     LONG ret;
     WCHAR key_format[] = {'\n','[','%','s',']','\n',0};
-    DWORD line_pos;
 
     /* get size information and resize the buffers if necessary */
     if (RegQueryInfoKeyW(key, NULL, NULL, NULL, NULL,
@@ -1005,7 +1004,6 @@ static void export_hkey(FILE *file, HKEY key,
         DWORD value_type;
         DWORD val_name_size1 = *val_name_size;
         DWORD val_size1 = *val_size;
-        DWORD line_len = 0;
         ret = RegEnumValueW(key, i, *val_name_buf, &val_name_size1, NULL,
                            &value_type, *val_buf, &val_size1);
         if (ret != ERROR_SUCCESS) {
@@ -1014,17 +1012,18 @@ static void export_hkey(FILE *file, HKEY key,
                 REGPROC_print_error();
             }
         } else {
+            DWORD line_len;
             i++;
 
             if ((*val_name_buf)[0]) {
                 const WCHAR val_start[] = {'"','%','s','"','=',0};
 
-                line_pos = line_len = 3 + lstrlenW(*val_name_buf);
+                line_len = 3 + lstrlenW(*val_name_buf);
                 REGPROC_resize_char_buffer(line_buf, line_buf_size, line_len);
                 wsprintfW(*line_buf, val_start, *val_name_buf);
             } else {
                 const WCHAR std_val[] = {'@','=',0};
-                line_pos = line_len = 2;
+                line_len = 2;
                 REGPROC_resize_char_buffer(line_buf, line_buf_size, line_len);
                 lstrcpyW(*line_buf, std_val);
             }
@@ -1035,16 +1034,18 @@ static void export_hkey(FILE *file, HKEY key,
             {
                 const WCHAR start[] = {'"',0};
                 const WCHAR end[] = {'"','\n',0};
+                DWORD len;
 
-                line_len += lstrlenW(start);
-                REGPROC_resize_char_buffer(line_buf, line_buf_size, line_len);
-                lstrcatW(*line_buf, start);
+                len = lstrlenW(start);
+                REGPROC_resize_char_buffer(line_buf, line_buf_size, line_len + len);
+                lstrcpyW(*line_buf + line_len, start);
+                line_len += len;
 
-                if (val_size1) REGPROC_export_string(line_buf, line_buf_size, &line_len, (WCHAR*) *val_buf);
+                if (val_size1)
+                    REGPROC_export_string(line_buf, line_buf_size, &line_len, (WCHAR*) *val_buf);
 
-                line_len += lstrlenW(end);
-                REGPROC_resize_char_buffer(line_buf, line_buf_size, line_len);
-                lstrcatW(*line_buf, end);
+                REGPROC_resize_char_buffer(line_buf, line_buf_size, line_len + lstrlenW(end));
+                lstrcpyW(*line_buf + line_len, end);
                 break;
             }
 
@@ -1052,9 +1053,8 @@ static void export_hkey(FILE *file, HKEY key,
             {
                 WCHAR format[] = {'d','w','o','r','d',':','%','0','8','x','\n',0};
 
-                line_len += 15;
-                REGPROC_resize_char_buffer(line_buf, line_buf_size, line_len);
-                wsprintfW(*line_buf + line_pos, format, *((DWORD *)*val_buf));
+                REGPROC_resize_char_buffer(line_buf, line_buf_size, line_len + 15);
+                wsprintfW(*line_buf + line_len, format, *((DWORD *)*val_buf));
                 break;
             }
 
@@ -1077,9 +1077,8 @@ static void export_hkey(FILE *file, HKEY key,
                     DWORD i1;
                     const WCHAR *hex_prefix;
                     WCHAR buf[20];
-                    int cur_pos;
+                    int hex_pos, data_pos, column;
                     const WCHAR hex[] = {'h','e','x',':',0};
-                    const WCHAR delim[] = {'"','"','=',0};
                     const WCHAR format[] = {'%','0','2','x',0};
                     const WCHAR comma[] = {',',0};
                     const WCHAR concat[] = {'\\','\n',' ',' ',0};
@@ -1097,35 +1096,32 @@ static void export_hkey(FILE *file, HKEY key,
                             val_buf1 = (BYTE*)GetMultiByteStringN((WCHAR*)*val_buf, val_size1 / sizeof(WCHAR), &val_buf1_size);
                     }
 
-                    /* position of where the next character will be printed */
-                    /* NOTE: yes, strlen("hex:") is used even for hex(x): */
-                    cur_pos = lstrlenW(delim) + lstrlenW(hex) +
-                              lstrlenW(*val_name_buf);
-
+                    hex_pos = line_len;
                     line_len += lstrlenW(hex_prefix);
+                    data_pos = line_len;
                     line_len += val_buf1_size * 3 + lstrlenW(concat) * ((int)((float)val_buf1_size * 3.0 / (float)REG_FILE_HEX_LINE_LEN) + 1 ) + 1;
                     REGPROC_resize_char_buffer(line_buf, line_buf_size, line_len);
-                    lstrcatW(*line_buf, hex_prefix);
-                    line_pos += lstrlenW(hex_prefix);
+                    lstrcpyW(*line_buf + hex_pos, hex_prefix);
+                    column = data_pos; /* no line wrap yet */
                     for (i1 = 0; i1 < val_buf1_size; i1++) {
-                        wsprintfW(*line_buf + line_pos, format, (unsigned int)(val_buf1)[i1]);
-                        line_pos += 2;
+                        wsprintfW(*line_buf + data_pos, format, (unsigned int)(val_buf1)[i1]);
+                        data_pos += 2;
                         if (i1 + 1 < val_buf1_size) {
-                            lstrcpyW(*line_buf + line_pos, comma);
-                            line_pos++;
+                            lstrcpyW(*line_buf + data_pos, comma);
+                            data_pos++;
                         }
-                        cur_pos += 3;
+                        column += 3;
 
                         /* wrap the line */
-                        if (cur_pos > REG_FILE_HEX_LINE_LEN) {
-                            lstrcpyW(*line_buf + line_pos, concat);
-                            line_pos += lstrlenW(concat);
-                            cur_pos = 2;
+                        if (column > REG_FILE_HEX_LINE_LEN) {
+                            lstrcpyW(*line_buf + data_pos, concat);
+                            data_pos += lstrlenW(concat);
+                            column = 2;
                         }
                     }
+                    lstrcpyW(*line_buf + data_pos, newline);
                     if(value_type == REG_MULTI_SZ && !unicode)
                         HeapFree(GetProcessHeap(), 0, val_buf1);
-                    lstrcpyW(*line_buf + line_pos, newline);
                     break;
                 }
             }




More information about the wine-cvs mailing list