Hugh McMaster : regedit: Use Unicode when printing system error messages.

Alexandre Julliard julliard at winehq.org
Fri Jul 15 09:07:07 CDT 2016


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

Author: Hugh McMaster <hugh.mcmaster at outlook.com>
Date:   Fri Jul 15 07:49:58 2016 +0000

regedit: Use Unicode when printing system error messages.

Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 programs/regedit/regedit.c |  2 +-
 programs/regedit/regproc.c | 25 +++++++++++++------------
 programs/regedit/regproc.h |  1 +
 3 files changed, 15 insertions(+), 13 deletions(-)

diff --git a/programs/regedit/regedit.c b/programs/regedit/regedit.c
index 55f2b8d..c0a1eab 100644
--- a/programs/regedit/regedit.c
+++ b/programs/regedit/regedit.c
@@ -28,7 +28,7 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(regedit);
 
-static void output_writeconsole(const WCHAR *str, DWORD wlen)
+void output_writeconsole(const WCHAR *str, DWORD wlen)
 {
     DWORD count, ret;
 
diff --git a/programs/regedit/regproc.c b/programs/regedit/regproc.c
index f072650..4a27bd5 100644
--- a/programs/regedit/regproc.c
+++ b/programs/regedit/regproc.c
@@ -31,8 +31,11 @@
 #include <winreg.h>
 #include <assert.h>
 #include <wine/unicode.h>
+#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,
@@ -856,20 +859,18 @@ static void processRegLinesW(FILE *in)
 
 static void REGPROC_print_error(void)
 {
-    LPVOID lpMsgBuf;
-    DWORD error_code;
-    int status;
-
-    error_code = GetLastError ();
-    status = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
-                            NULL, error_code, 0, (LPSTR) &lpMsgBuf, 0, NULL);
-    if (!status) {
-        fprintf(stderr, "regedit: Cannot display message for error %d, status %d\n",
-                error_code, GetLastError());
+    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);
     }
-    puts(lpMsgBuf);
-    LocalFree(lpMsgBuf);
+    output_writeconsole(str, len);
+    LocalFree(str);
     exit(1);
 }
 
diff --git a/programs/regedit/regproc.h b/programs/regedit/regproc.h
index aff4bee..bc46009 100644
--- a/programs/regedit/regproc.h
+++ b/programs/regedit/regproc.h
@@ -24,6 +24,7 @@
 #define REG_FORMAT_5 1
 #define REG_FORMAT_4 2
 
+void output_writeconsole(const WCHAR *str, DWORD wlen);
 void __cdecl output_message(unsigned int id, ...);
 
 BOOL export_registry_key(WCHAR *file_name, WCHAR *reg_key_name, DWORD format);




More information about the wine-cvs mailing list