Alexander Nicolaysen Sørnes : regedit: Fix char escaping for registry export.

Alexandre Julliard julliard at winehq.org
Mon Sep 22 07:04:48 CDT 2008


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

Author: Alexander Nicolaysen Sørnes <alex at thehandofagony.com>
Date:   Sun Sep 21 23:20:42 2008 +0200

regedit: Fix char escaping for registry export.

---

 programs/regedit/regproc.c |   23 +++++++++++------------
 1 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/programs/regedit/regproc.c b/programs/regedit/regproc.c
index 3ee7370..ce26319 100644
--- a/programs/regedit/regproc.c
+++ b/programs/regedit/regproc.c
@@ -885,7 +885,7 @@ static void REGPROC_export_string(WCHAR **line_buf, DWORD *line_buf_size, DWORD
     DWORD i;
     DWORD extra = 0;
 
-    REGPROC_resize_char_buffer(line_buf, line_buf_size, len + 10);
+    REGPROC_resize_char_buffer(line_buf, line_buf_size, len + *line_size + 10);
 
     /* escaping characters */
     for (i = 0; i < len; i++) {
@@ -895,37 +895,36 @@ 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));
             extra++;
-            REGPROC_resize_char_buffer(line_buf, line_buf_size, len + extra);
-            memcpy(*line_buf + *line_size - 1, escape, 2 * sizeof(WCHAR));
             break;
         }
-        case '\"':
+        case '"':
         {
             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));
             extra++;
-            REGPROC_resize_char_buffer(line_buf, line_buf_size, len + extra);
-            memcpy(*line_buf + *line_size - 1, escape, 2 * sizeof(WCHAR));
             break;
         }
         case '\n':
         {
-            const WCHAR escape[] = {'\\','\n'};
+            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));
             extra++;
-            REGPROC_resize_char_buffer(line_buf, line_buf_size, len + extra);
-            memcpy(*line_buf + *line_size - 1, escape, 2 * sizeof(WCHAR));
             break;
         }
         default:
-            memcpy(*line_buf + *line_size - 1, &c, sizeof(WCHAR));
+            memcpy(*line_buf + *line_size + i + extra - 1, &c, sizeof(WCHAR));
             break;
         }
-        *line_size += 1;
     }
+    *line_size += len + extra;
     *(*line_buf + *line_size - 1) = 0;
-    *line_size += extra;
 }
 
 /******************************************************************************




More information about the wine-cvs mailing list