xref: /reactos/base/applications/regedit/error.c (revision 470cef7b)
1 /*
2  * Regedit errors, warnings, informations displaying
3  *
4  * Copyright (C) 2010 Adam Kachwalla <geekdundee@gmail.com>
5  * Copyright (C) 2012 Hermès Bélusca - Maïto <hermes.belusca@sfr.fr>
6  * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
7  */
8 
9 #include "regedit.h"
10 
ErrorMessageBox(HWND hWnd,LPCWSTR lpTitle,DWORD dwErrorCode,...)11 int ErrorMessageBox(HWND hWnd, LPCWSTR lpTitle, DWORD dwErrorCode, ...)
12 {
13     int iRet = 0;
14     LPWSTR lpMsgBuf = NULL;
15     DWORD Status = 0;
16     va_list args;
17 
18     va_start(args, dwErrorCode);
19 
20     Status = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
21                             NULL,
22                             dwErrorCode,
23                             MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
24                             (LPWSTR)&lpMsgBuf,
25                             0,
26                             &args);
27 
28     va_end(args);
29 
30     iRet = MessageBoxW(hWnd, (Status && lpMsgBuf ? lpMsgBuf : L"Error displaying error message."), lpTitle, MB_OK | MB_ICONERROR);
31 
32     if (lpMsgBuf) LocalFree(lpMsgBuf);
33 
34     /* Return the MessageBoxW information */
35     return iRet;
36 }
37 
InfoMessageBox(HWND hWnd,UINT uType,LPCWSTR lpTitle,LPCWSTR lpMessage,...)38 int InfoMessageBox(HWND hWnd, UINT uType, LPCWSTR lpTitle, LPCWSTR lpMessage, ...)
39 {
40     int iRet = 0;
41     LPWSTR lpMsgBuf = NULL;
42     va_list args;
43 
44     va_start(args, lpMessage);
45 
46     if (lpMessage)
47     {
48         SIZE_T strLen = _vscwprintf(lpMessage, args);
49 
50         /* Create a buffer on the heap and zero it out (LPTR) */
51         lpMsgBuf = (LPWSTR)LocalAlloc(LPTR, (strLen + 1) * sizeof(WCHAR));
52         if (lpMsgBuf)
53         {
54             _vsnwprintf(lpMsgBuf, strLen, lpMessage, args);
55         }
56     }
57 
58     va_end(args);
59 
60     iRet = MessageBoxW(hWnd, (lpMessage && lpMsgBuf ? lpMsgBuf : L"Error displaying info message."), lpTitle, uType);
61 
62     if (lpMsgBuf) LocalFree(lpMsgBuf);
63 
64     /* Return the MessageBoxW information */
65     return iRet;
66 }
67