Francois Gouget : regedit: Simplify REGPROC_export_string().

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


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

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

regedit: Simplify REGPROC_export_string().

---

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

diff --git a/programs/regedit/regproc.c b/programs/regedit/regproc.c
index 8ad3775..07fe243 100644
--- a/programs/regedit/regproc.c
+++ b/programs/regedit/regproc.c
@@ -892,49 +892,37 @@ static void REGPROC_resize_char_buffer(WCHAR **buffer, DWORD *len, DWORD require
 static void REGPROC_export_string(WCHAR **line_buf, DWORD *line_buf_size, DWORD *line_len, WCHAR *str)
 {
     DWORD len = lstrlenW(str);
-    DWORD i;
+    DWORD i, pos;
     DWORD extra = 0;
 
     REGPROC_resize_char_buffer(line_buf, line_buf_size, *line_len + len + 10);
 
     /* escaping characters */
+    pos = *line_len;
     for (i = 0; i < len; i++) {
         WCHAR c = str[i];
         switch (c) {
-        case '\\':
-        {
-            const WCHAR escape[] = {'\\','\\'};
-
-            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));
+        case '\n':
             extra++;
+            REGPROC_resize_char_buffer(line_buf, line_buf_size, *line_len + len + extra);
+            (*line_buf)[pos++] = '\\';
+            (*line_buf)[pos++] = 'n';
             break;
-        }
-        case '"':
-        {
-            const WCHAR escape[] = {'\\','"'};
 
-            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));
+        case '\\':
+        case '"':
             extra++;
-            break;
-        }
-        case '\n':
-        {
-            const WCHAR escape[] = {'\\','n'};
+            REGPROC_resize_char_buffer(line_buf, line_buf_size, *line_len + len + extra);
+            (*line_buf)[pos++] = '\\';
+            /* Fall through */
 
-            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_len + i + extra, &c, sizeof(WCHAR));
+            (*line_buf)[pos++] = c;
             break;
         }
     }
-    *line_len += len + extra;
-    *(*line_buf + *line_len) = 0;
+    (*line_buf)[pos] = '\0';
+    *line_len = pos;
 }
 
 /******************************************************************************




More information about the wine-cvs mailing list