Francois Gouget : regedit: Simplify / clean up export_hkey().
Alexandre Julliard
julliard at winehq.org
Wed Nov 12 07:18:50 CST 2008
Module: wine
Branch: master
Commit: 7df722259486931ccaefaeead2bca8d29166be74
URL: http://source.winehq.org/git/wine.git/?a=commit;h=7df722259486931ccaefaeead2bca8d29166be74
Author: Francois Gouget <fgouget at codeweavers.com>
Date: Wed Nov 12 11:29:51 2008 +0100
regedit: Simplify / clean up export_hkey().
Avoid unneeded/redundant calls to lstrcatW() and lstrlenW().
Tighten the scope of variables.
---
programs/regedit/regproc.c | 62 ++++++++++++++++++++-----------------------
1 files changed, 29 insertions(+), 33 deletions(-)
diff --git a/programs/regedit/regproc.c b/programs/regedit/regproc.c
index 0dda28c..e3e4811 100644
--- a/programs/regedit/regproc.c
+++ b/programs/regedit/regproc.c
@@ -972,7 +972,6 @@ static void export_hkey(FILE *file, HKEY key,
BOOL more_data;
LONG ret;
WCHAR key_format[] = {'\n','[','%','s',']','\n',0};
- DWORD line_pos;
/* get size information and resize the buffers if necessary */
if (RegQueryInfoKeyW(key, NULL, NULL, NULL, NULL,
@@ -1005,7 +1004,6 @@ static void export_hkey(FILE *file, HKEY key,
DWORD value_type;
DWORD val_name_size1 = *val_name_size;
DWORD val_size1 = *val_size;
- DWORD line_len = 0;
ret = RegEnumValueW(key, i, *val_name_buf, &val_name_size1, NULL,
&value_type, *val_buf, &val_size1);
if (ret != ERROR_SUCCESS) {
@@ -1014,17 +1012,18 @@ static void export_hkey(FILE *file, HKEY key,
REGPROC_print_error();
}
} else {
+ DWORD line_len;
i++;
if ((*val_name_buf)[0]) {
const WCHAR val_start[] = {'"','%','s','"','=',0};
- line_pos = line_len = 3 + lstrlenW(*val_name_buf);
+ 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);
} else {
const WCHAR std_val[] = {'@','=',0};
- line_pos = line_len = 2;
+ line_len = 2;
REGPROC_resize_char_buffer(line_buf, line_buf_size, line_len);
lstrcpyW(*line_buf, std_val);
}
@@ -1035,16 +1034,18 @@ static void export_hkey(FILE *file, HKEY key,
{
const WCHAR start[] = {'"',0};
const WCHAR end[] = {'"','\n',0};
+ DWORD len;
- line_len += lstrlenW(start);
- REGPROC_resize_char_buffer(line_buf, line_buf_size, line_len);
- lstrcatW(*line_buf, start);
+ len = lstrlenW(start);
+ REGPROC_resize_char_buffer(line_buf, line_buf_size, line_len + len);
+ lstrcpyW(*line_buf + line_len, start);
+ line_len += len;
- if (val_size1) REGPROC_export_string(line_buf, line_buf_size, &line_len, (WCHAR*) *val_buf);
+ if (val_size1)
+ REGPROC_export_string(line_buf, line_buf_size, &line_len, (WCHAR*) *val_buf);
- line_len += lstrlenW(end);
- REGPROC_resize_char_buffer(line_buf, line_buf_size, line_len);
- lstrcatW(*line_buf, end);
+ REGPROC_resize_char_buffer(line_buf, line_buf_size, line_len + lstrlenW(end));
+ lstrcpyW(*line_buf + line_len, end);
break;
}
@@ -1052,9 +1053,8 @@ static void export_hkey(FILE *file, HKEY key,
{
WCHAR format[] = {'d','w','o','r','d',':','%','0','8','x','\n',0};
- line_len += 15;
- REGPROC_resize_char_buffer(line_buf, line_buf_size, line_len);
- wsprintfW(*line_buf + line_pos, format, *((DWORD *)*val_buf));
+ REGPROC_resize_char_buffer(line_buf, line_buf_size, line_len + 15);
+ wsprintfW(*line_buf + line_len, format, *((DWORD *)*val_buf));
break;
}
@@ -1077,9 +1077,8 @@ static void export_hkey(FILE *file, HKEY key,
DWORD i1;
const WCHAR *hex_prefix;
WCHAR buf[20];
- int cur_pos;
+ int hex_pos, data_pos, column;
const WCHAR hex[] = {'h','e','x',':',0};
- const WCHAR delim[] = {'"','"','=',0};
const WCHAR format[] = {'%','0','2','x',0};
const WCHAR comma[] = {',',0};
const WCHAR concat[] = {'\\','\n',' ',' ',0};
@@ -1097,35 +1096,32 @@ static void export_hkey(FILE *file, HKEY key,
val_buf1 = (BYTE*)GetMultiByteStringN((WCHAR*)*val_buf, val_size1 / sizeof(WCHAR), &val_buf1_size);
}
- /* position of where the next character will be printed */
- /* NOTE: yes, strlen("hex:") is used even for hex(x): */
- cur_pos = lstrlenW(delim) + lstrlenW(hex) +
- lstrlenW(*val_name_buf);
-
+ hex_pos = line_len;
line_len += lstrlenW(hex_prefix);
+ data_pos = line_len;
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);
+ lstrcpyW(*line_buf + hex_pos, hex_prefix);
+ column = data_pos; /* no line wrap yet */
for (i1 = 0; i1 < val_buf1_size; i1++) {
- wsprintfW(*line_buf + line_pos, format, (unsigned int)(val_buf1)[i1]);
- line_pos += 2;
+ wsprintfW(*line_buf + data_pos, format, (unsigned int)(val_buf1)[i1]);
+ data_pos += 2;
if (i1 + 1 < val_buf1_size) {
- lstrcpyW(*line_buf + line_pos, comma);
- line_pos++;
+ lstrcpyW(*line_buf + data_pos, comma);
+ data_pos++;
}
- cur_pos += 3;
+ column += 3;
/* wrap the line */
- if (cur_pos > REG_FILE_HEX_LINE_LEN) {
- lstrcpyW(*line_buf + line_pos, concat);
- line_pos += lstrlenW(concat);
- cur_pos = 2;
+ if (column > REG_FILE_HEX_LINE_LEN) {
+ lstrcpyW(*line_buf + data_pos, concat);
+ data_pos += lstrlenW(concat);
+ column = 2;
}
}
+ lstrcpyW(*line_buf + data_pos, newline);
if(value_type == REG_MULTI_SZ && !unicode)
HeapFree(GetProcessHeap(), 0, val_buf1);
- lstrcpyW(*line_buf + line_pos, newline);
break;
}
}
More information about the wine-cvs
mailing list