Alexandre Julliard : regedit: Don' t die if we fail to open a key during exporting.
Alexandre Julliard
julliard at winehq.org
Thu Aug 11 09:37:48 CDT 2016
Module: wine
Branch: master
Commit: b90628c15e20694f3cc1add8c28e487bac00c2b2
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b90628c15e20694f3cc1add8c28e487bac00c2b2
Author: Alexandre Julliard <julliard at winehq.org>
Date: Thu Aug 11 13:48:42 2016 +0900
regedit: Don't die if we fail to open a key during exporting.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
programs/regedit/regproc.c | 56 ++++++++--------------------------------------
1 file changed, 9 insertions(+), 47 deletions(-)
diff --git a/programs/regedit/regproc.c b/programs/regedit/regproc.c
index bc5c09c..e3e26c0 100644
--- a/programs/regedit/regproc.c
+++ b/programs/regedit/regproc.c
@@ -34,8 +34,6 @@
#include <wine/debug.h>
#include "regproc.h"
-WINE_DEFAULT_DEBUG_CHANNEL(regedit);
-
#define REG_VAL_BUF_SIZE 4096
/* maximal number of characters in hexadecimal data line,
@@ -870,29 +868,6 @@ static void processRegLinesW(FILE *in)
HeapFree(GetProcessHeap(), 0, buf);
}
-/****************************************************************************
- * REGPROC_print_error
- *
- * Print the message for GetLastError
- */
-
-static void REGPROC_print_error(void)
-{
- WCHAR *str;
- DWORD error_code, len;
-
- error_code = GetLastError();
- len = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
- NULL, error_code, 0, (WCHAR *)&str, 0, NULL);
- if (len == 0 && GetLastError() != NO_ERROR) {
- WINE_FIXME("FormatMessage failed: le=%u, previous=%u\n", GetLastError(), error_code);
- exit(1);
- }
- output_writeconsole(str, len);
- LocalFree(str);
- exit(1);
-}
-
/******************************************************************************
* Checks whether the buffer has enough room for the string or required size.
* Resizes the buffer if necessary.
@@ -1097,7 +1072,6 @@ static void export_hkey(FILE *file, HKEY key,
DWORD max_val_size;
DWORD curr_len;
DWORD i;
- BOOL more_data;
LONG ret;
WCHAR key_format[] = {'\r','\n','[','%','s',']','\r','\n',0};
@@ -1105,9 +1079,8 @@ static void export_hkey(FILE *file, HKEY key,
if (RegQueryInfoKeyW(key, NULL, NULL, NULL, NULL,
&max_sub_key_len, NULL,
NULL, &max_val_name_len, &max_val_size, NULL, NULL
- ) != ERROR_SUCCESS) {
- REGPROC_print_error();
- }
+ ) != ERROR_SUCCESS)
+ return;
curr_len = strlenW(*reg_key_name_buf);
REGPROC_resize_char_buffer(reg_key_name_buf, reg_key_name_size,
max_sub_key_len + curr_len + 1);
@@ -1121,8 +1094,7 @@ static void export_hkey(FILE *file, HKEY key,
/* print all the values */
i = 0;
- more_data = TRUE;
- while(more_data) {
+ for (;;) {
DWORD value_type;
DWORD val_name_size1 = *val_name_size;
DWORD val_size1 = *val_size;
@@ -1132,12 +1104,7 @@ static void export_hkey(FILE *file, HKEY key,
/* Increase the size of the buffers and retry */
REGPROC_resize_char_buffer(val_name_buf, val_name_size, val_name_size1);
REGPROC_resize_binary_buffer(val_buf, val_size, val_size1);
- } else if (ret != ERROR_SUCCESS) {
- more_data = FALSE;
- if (ret != ERROR_NO_MORE_ITEMS) {
- REGPROC_print_error();
- }
- } else {
+ } else if (ret == ERROR_SUCCESS) {
DWORD line_len;
i++;
@@ -1208,12 +1175,12 @@ static void export_hkey(FILE *file, HKEY key,
}
REGPROC_write_line(file, *line_buf, unicode);
}
+ else break;
}
i = 0;
- more_data = TRUE;
(*reg_key_name_buf)[curr_len] = '\\';
- while(more_data) {
+ for (;;) {
DWORD buf_size = *reg_key_name_size - curr_len - 1;
ret = RegEnumKeyExW(key, i, *reg_key_name_buf + curr_len + 1, &buf_size,
@@ -1221,12 +1188,7 @@ static void export_hkey(FILE *file, HKEY key,
if (ret == ERROR_MORE_DATA) {
/* Increase the size of the buffer and retry */
REGPROC_resize_char_buffer(reg_key_name_buf, reg_key_name_size, curr_len + 1 + buf_size);
- } else if (ret != ERROR_SUCCESS) {
- more_data = FALSE;
- if (ret != ERROR_NO_MORE_ITEMS) {
- REGPROC_print_error();
- }
- } else {
+ } else if (ret == ERROR_SUCCESS) {
HKEY subkey;
i++;
@@ -1236,10 +1198,10 @@ static void export_hkey(FILE *file, HKEY key,
val_name_buf, val_name_size, val_buf, val_size,
line_buf, line_buf_size, unicode);
RegCloseKey(subkey);
- } else {
- REGPROC_print_error();
}
+ else break;
}
+ else break;
}
(*reg_key_name_buf)[curr_len] = '\0';
}
More information about the wine-cvs
mailing list