From: Hugh McMaster Subject: [PATCH 3/7] reg: Use FormatMessage for easier internationalization support Message-Id: Date: Fri, 5 Feb 2016 19:08:32 +1100 In-Reply-To: <1454659716-22187-1-git-send-email-hugh.mcmaster@outlook.com> References: <1454659716-22187-1-git-send-email-hugh.mcmaster@outlook.com> Signed-off-by: Hugh McMaster --- programs/reg/reg.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/programs/reg/reg.c b/programs/reg/reg.c index 56ee89a..179ed7d 100644 --- a/programs/reg/reg.c +++ b/programs/reg/reg.c @@ -18,10 +18,13 @@ #include #include +#include #include "reg.h" #define ARRAY_SIZE(A) (sizeof(A)/sizeof(*A)) +WINE_DEFAULT_DEBUG_CHANNEL(reg); + static const WCHAR short_hklm[] = {'H','K','L','M',0}; static const WCHAR short_hkcu[] = {'H','K','C','U',0}; static const WCHAR short_hkcr[] = {'H','K','C','R',0}; @@ -74,12 +77,10 @@ type_rels[] = {REG_MULTI_SZ, type_multi_sz}, }; -static void output_writeconsole(const WCHAR *str) +static void output_writeconsole(const WCHAR *str, DWORD wlen) { - int wlen; DWORD count, ret; - wlen = lstrlenW(str); ret = WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), str, wlen, &count, NULL); if (!ret) { @@ -102,10 +103,19 @@ static void output_writeconsole(const WCHAR *str) static void output_formatstring(const WCHAR *fmt, __ms_va_list va_args) { - WCHAR msg_buffer[8192]; + WCHAR *str; + DWORD len; - vsnprintfW(msg_buffer, sizeof(msg_buffer)/sizeof(WCHAR), fmt, va_args); - output_writeconsole(msg_buffer); + SetLastError(NO_ERROR); + len = FormatMessageW(FORMAT_MESSAGE_FROM_STRING|FORMAT_MESSAGE_ALLOCATE_BUFFER, + fmt, 0, 0, (LPWSTR)&str, 0, &va_args); + if (len == 0 && GetLastError() != NO_ERROR) + { + WINE_FIXME("Could not format string: le=%u, fmt=%s\n", GetLastError(), wine_dbgstr_w(fmt)); + return; + } + output_writeconsole(str, len); + LocalFree(str); } static void reg_message(int msg) @@ -114,7 +124,7 @@ static void reg_message(int msg) LoadStringW(GetModuleHandleW(NULL), msg, msg_buffer, sizeof(msg_buffer)/sizeof(WCHAR)); - output_writeconsole(msg_buffer); + output_writeconsole(msg_buffer, strlenW(msg_buffer)); } static void __cdecl output_array(const WCHAR *fmt, ...) @@ -238,7 +248,7 @@ static LPBYTE get_regdata(LPWSTR data, DWORD reg_type, WCHAR separator, DWORD *r } default: { - static const WCHAR unhandled[] = {'U','n','h','a','n','d','l','e','d',' ','T','y','p','e',' ','0','x','%','x',' ',' ','d','a','t','a',' ','%','s','\n',0}; + static const WCHAR unhandled[] = {'U','n','h','a','n','d','l','e','d',' ','T','y','p','e',' ','0','x','%','1','!','x','!',',',' ','d','a','t','a',' ','%','2','\n',0}; output_array(unhandled, reg_type, data); } } @@ -447,7 +457,7 @@ static int reg_query(WCHAR *key_name, WCHAR *value_name, BOOL value_empty, BOOL subkey) { static const WCHAR stubW[] = {'S','T','U','B',' ','Q','U','E','R','Y',' ', - '-',' ','%','s',' ','%','s',' ','%','d',' ','%','d','\n',0}; + '-',' ','%','1',' ','%','2',' ','%','3','!','d','!',' ','%','4','!','d','!','\n',0}; output_array(stubW, key_name, value_name, value_empty, subkey); return 1; -- 1.9.1