Francois Gouget : regedit: Simplify REGPROC_export_string().
Module: wine Branch: master Commit: d1d3db4183a0c917ed4813de7eb3f879916a3168 URL: http://source.winehq.org/git/wine.git/?a=commit;h=d1d3db4183a0c917ed4813de7e... Author: Francois Gouget <fgouget(a)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; } /******************************************************************************
participants (1)
-
Alexandre Julliard