Francois Gouget : regedit: line_size is supposed to track a string length.

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


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

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

regedit: line_size is supposed to track a string length.

That is it does not count the trailing '\0'.
Fix a few places that got this wrong and rename it to line_len.

---

 programs/regedit/regproc.c |   54 +++++++++++++++++++++----------------------
 1 files changed, 26 insertions(+), 28 deletions(-)

diff --git a/programs/regedit/regproc.c b/programs/regedit/regproc.c
index 7ed45a1..9b67f94 100644
--- a/programs/regedit/regproc.c
+++ b/programs/regedit/regproc.c
@@ -889,13 +889,13 @@ static void REGPROC_resize_char_buffer(WCHAR **buffer, DWORD *len, DWORD require
 /******************************************************************************
  * Prints string str to file
  */
-static void REGPROC_export_string(WCHAR **line_buf, DWORD *line_buf_size, DWORD *line_size, WCHAR *str)
+static void REGPROC_export_string(WCHAR **line_buf, DWORD *line_buf_size, DWORD *line_len, WCHAR *str)
 {
     DWORD len = lstrlenW(str);
     DWORD i;
     DWORD extra = 0;
 
-    REGPROC_resize_char_buffer(line_buf, line_buf_size, len + *line_size + 10);
+    REGPROC_resize_char_buffer(line_buf, line_buf_size, *line_len + len + 10);
 
     /* escaping characters */
     for (i = 0; i < len; i++) {
@@ -905,8 +905,8 @@ static void REGPROC_export_string(WCHAR **line_buf, DWORD *line_buf_size, DWORD
         {
             const WCHAR escape[] = {'\\','\\'};
 
-            REGPROC_resize_char_buffer(line_buf, line_buf_size, len + *line_size + extra + 1);
-            memcpy(*line_buf + *line_size + i + extra - 1, escape, 2 * sizeof(WCHAR));
+            REGPROC_resize_char_buffer(line_buf, line_buf_size, *line_len + len + extra + 1);
+            memcpy(*line_buf + *line_len + i + extra, escape, 2 * sizeof(WCHAR));
             extra++;
             break;
         }
@@ -914,8 +914,8 @@ static void REGPROC_export_string(WCHAR **line_buf, DWORD *line_buf_size, DWORD
         {
             const WCHAR escape[] = {'\\','"'};
 
-            REGPROC_resize_char_buffer(line_buf, line_buf_size, len + *line_size + extra + 1);
-            memcpy(*line_buf + *line_size + i + extra - 1, escape, 2 * sizeof(WCHAR));
+            REGPROC_resize_char_buffer(line_buf, line_buf_size, *line_len + len + extra + 1);
+            memcpy(*line_buf + *line_len + i + extra, escape, 2 * sizeof(WCHAR));
             extra++;
             break;
         }
@@ -923,18 +923,18 @@ static void REGPROC_export_string(WCHAR **line_buf, DWORD *line_buf_size, DWORD
         {
             const WCHAR escape[] = {'\\','n'};
 
-            REGPROC_resize_char_buffer(line_buf, line_buf_size, len + *line_size + extra + 1);
-            memcpy(*line_buf + *line_size + i + extra - 1, escape, 2 * sizeof(WCHAR));
+            REGPROC_resize_char_buffer(line_buf, line_buf_size, *line_len + len + extra + 1);
+            memcpy(*line_buf + *line_len + i + extra, escape, 2 * sizeof(WCHAR));
             extra++;
             break;
         }
         default:
-            memcpy(*line_buf + *line_size + i + extra - 1, &c, sizeof(WCHAR));
+            memcpy(*line_buf + *line_len + i + extra, &c, sizeof(WCHAR));
             break;
         }
     }
-    *line_size += len + extra;
-    *(*line_buf + *line_size - 1) = 0;
+    *line_len += len + extra;
+    *(*line_buf + *line_len) = 0;
 }
 
 /******************************************************************************
@@ -1017,7 +1017,7 @@ static void export_hkey(FILE *file, HKEY key,
         DWORD value_type;
         DWORD val_name_len1 = *val_name_len;
         DWORD val_size1 = *val_size;
-        DWORD line_size = 0;
+        DWORD line_len = 0;
         ret = RegEnumValueW(key, i, *val_name_buf, &val_name_len1, NULL,
                            &value_type, *val_buf, &val_size1);
         if (ret != ERROR_SUCCESS) {
@@ -1031,16 +1031,14 @@ static void export_hkey(FILE *file, HKEY key,
             if ((*val_name_buf)[0]) {
                 const WCHAR val_start[] = {'"','%','s','"','=',0};
 
-                line_size = 4 + lstrlenW(*val_name_buf);
-                REGPROC_resize_char_buffer(line_buf, line_buf_size, line_size);
+                line_pos = 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);
-                line_pos = lstrlenW(*line_buf);
             } else {
                 const WCHAR std_val[] = {'@','=',0};
-                line_size = 3;
-                REGPROC_resize_char_buffer(line_buf, line_buf_size, line_size);
+                line_pos = line_len = 2;
+                REGPROC_resize_char_buffer(line_buf, line_buf_size, line_len);
                 lstrcpyW(*line_buf, std_val);
-                line_pos = lstrlenW(*line_buf);
             }
 
             switch (value_type) {
@@ -1050,14 +1048,14 @@ static void export_hkey(FILE *file, HKEY key,
                 const WCHAR start[] = {'"',0};
                 const WCHAR end[] = {'"','\n',0};
 
-                line_size += lstrlenW(start);
-                REGPROC_resize_char_buffer(line_buf, line_buf_size, line_size);
+                line_len += lstrlenW(start);
+                REGPROC_resize_char_buffer(line_buf, line_buf_size, line_len);
                 lstrcatW(*line_buf, start);
 
-                if (val_size1) REGPROC_export_string(line_buf, line_buf_size, &line_size, (WCHAR*) *val_buf);
+                if (val_size1) REGPROC_export_string(line_buf, line_buf_size, &line_len, (WCHAR*) *val_buf);
 
-                line_size += lstrlenW(end);
-                REGPROC_resize_char_buffer(line_buf, line_buf_size, line_size);
+                line_len += lstrlenW(end);
+                REGPROC_resize_char_buffer(line_buf, line_buf_size, line_len);
                 lstrcatW(*line_buf, end);
                 break;
             }
@@ -1066,8 +1064,8 @@ static void export_hkey(FILE *file, HKEY key,
             {
                 WCHAR format[] = {'d','w','o','r','d',':','%','0','8','x','\n',0};
 
-                line_size += 20;
-                REGPROC_resize_char_buffer(line_buf, line_buf_size, line_size);
+                line_len += 20;
+                REGPROC_resize_char_buffer(line_buf, line_buf_size, line_len);
                 wsprintfW(*line_buf + line_pos, format, *((DWORD *)*val_buf));
                 break;
             }
@@ -1116,9 +1114,9 @@ static void export_hkey(FILE *file, HKEY key,
                     cur_pos = lstrlenW(delim) + lstrlenW(hex) +
                               lstrlenW(*val_name_buf);
 
-                    line_size += lstrlenW(hex_prefix);
-                    line_size += 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_size);
+                    line_len += lstrlenW(hex_prefix);
+                    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);
                     for (i1 = 0; i1 < val_buf1_size; i1++) {




More information about the wine-cvs mailing list