Module: wine Branch: master Commit: d1d3db4183a0c917ed4813de7eb3f879916a3168 URL: http://source.winehq.org/git/wine.git/?a=commit;h=d1d3db4183a0c917ed4813de7e...
Author: Francois Gouget fgouget@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; }
/******************************************************************************