Imported Upstream version 9.20
[platform/upstream/7zip.git] / CPP / Windows / Error.cpp
1 // Windows/Error.h\r
2 \r
3 #include "StdAfx.h"\r
4 \r
5 #include "Windows/Error.h"\r
6 #ifndef _UNICODE\r
7 #include "Common/StringConvert.h"\r
8 #endif\r
9 \r
10 #ifndef _UNICODE\r
11 extern bool g_IsNT;\r
12 #endif\r
13 \r
14 namespace NWindows {\r
15 namespace NError {\r
16 \r
17 bool MyFormatMessage(DWORD messageID, CSysString &message)\r
18 {\r
19   LPVOID msgBuf;\r
20   if (::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |\r
21       FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,\r
22       NULL,messageID, 0, (LPTSTR) &msgBuf,0, NULL) == 0)\r
23     return false;\r
24   message = (LPCTSTR)msgBuf;\r
25   ::LocalFree(msgBuf);\r
26   return true;\r
27 }\r
28 \r
29 #ifndef _UNICODE\r
30 bool MyFormatMessage(DWORD messageID, UString &message)\r
31 {\r
32   if (g_IsNT)\r
33   {\r
34     LPVOID msgBuf;\r
35     if (::FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER |\r
36         FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,\r
37         NULL, messageID, 0, (LPWSTR) &msgBuf, 0, NULL) == 0)\r
38       return false;\r
39     message = (LPCWSTR)msgBuf;\r
40     ::LocalFree(msgBuf);\r
41     return true;\r
42   }\r
43   CSysString messageSys;\r
44   bool result = MyFormatMessage(messageID, messageSys);\r
45   message = GetUnicodeString(messageSys);\r
46   return result;\r
47 }\r
48 #endif\r
49 \r
50 }}\r