OSDN Git Service

Fix when setting ssh client is null. GIT_SSH environment variable is not clear
[tortoisegit/TortoiseGitJp.git] / src / crashrpt / CrashRpt.cpp
1 ///////////////////////////////////////////////////////////////////////////////\r
2 //\r
3 //  Module: CrashRpt.cpp\r
4 //\r
5 //    Desc: See CrashRpt.h\r
6 //\r
7 // Copyright (c) 2003 Michael Carruth\r
8 //\r
9 ///////////////////////////////////////////////////////////////////////////////\r
10 \r
11 #include "stdafx.h"\r
12 #include "CrashRpt.h"\r
13 #include "CrashHandler.h"\r
14 \r
15 #include "StackTrace.h"\r
16 \r
17 #ifdef _DEBUG\r
18 #define CRASH_ASSERT(pObj)          \\r
19    if (!pObj || sizeof(*pObj) != sizeof(CCrashHandler))  \\r
20       DebugBreak()                                       \r
21 #else\r
22 #define CRASH_ASSERT(pObj)\r
23 #endif // _DEBUG\r
24 \r
25 // New interfaces\r
26 CRASHRPTAPI LPVOID GetInstance()\r
27 {\r
28    CCrashHandler *pImpl = CCrashHandler::GetInstance();\r
29    CRASH_ASSERT(pImpl);\r
30    return pImpl;\r
31 }\r
32 \r
33 CRASHRPTAPI LPVOID InstallEx(LPGETLOGFILE pfn, LPCTSTR lpcszTo, LPCTSTR lpcszSubject, BOOL bUseUI)\r
34 {\r
35 #ifdef _DEBUG\r
36         OutputDebugString("InstallEx\n");\r
37 #endif\r
38    CCrashHandler *pImpl = CCrashHandler::GetInstance();\r
39    CRASH_ASSERT(pImpl);\r
40    pImpl->Install(pfn, lpcszTo, lpcszSubject, bUseUI);\r
41 \r
42    return pImpl;\r
43 }\r
44 \r
45 CRASHRPTAPI void UninstallEx(LPVOID lpState)\r
46 {\r
47    CCrashHandler *pImpl = (CCrashHandler*)lpState;\r
48    CRASH_ASSERT(pImpl);\r
49 \r
50    delete pImpl;\r
51 }\r
52 \r
53 CRASHRPTAPI void EnableUIEx(LPVOID lpState)\r
54 {\r
55         CCrashHandler *pImpl = (CCrashHandler*)lpState;\r
56         CRASH_ASSERT(pImpl);\r
57         pImpl->EnableUI();\r
58 }\r
59 \r
60 CRASHRPTAPI void DisableUIEx(LPVOID lpState)\r
61 {\r
62         CCrashHandler *pImpl = (CCrashHandler*)lpState;\r
63         CRASH_ASSERT(pImpl);\r
64         pImpl->DisableUI();\r
65 }\r
66 \r
67 CRASHRPTAPI void EnableHandlerEx(LPVOID lpState)\r
68 {\r
69         CCrashHandler *pImpl = (CCrashHandler*)lpState;\r
70         CRASH_ASSERT(pImpl);\r
71         pImpl->EnableHandler();\r
72 }\r
73 \r
74 CRASHRPTAPI void DisableHandlerEx(LPVOID lpState)\r
75 {\r
76         CCrashHandler *pImpl = (CCrashHandler*)lpState;\r
77         CRASH_ASSERT(pImpl);\r
78         pImpl->DisableHandler();\r
79 }\r
80 \r
81 CRASHRPTAPI void AddFileEx(LPVOID lpState, LPCTSTR lpFile, LPCTSTR lpDesc)\r
82 {\r
83    CCrashHandler *pImpl = (CCrashHandler*)lpState;\r
84    CRASH_ASSERT(pImpl);\r
85 \r
86    pImpl->AddFile(lpFile, lpDesc);\r
87 }\r
88 \r
89 CRASHRPTAPI void RemoveFileEx(LPVOID lpState, LPCTSTR lpFile)\r
90 {\r
91    CCrashHandler *pImpl = (CCrashHandler*)lpState;\r
92    CRASH_ASSERT(pImpl);\r
93 \r
94    pImpl->RemoveFile(lpFile);\r
95 }\r
96 \r
97 CRASHRPTAPI void AddRegistryHiveEx(LPVOID lpState, LPCTSTR lpHive, LPCTSTR lpDesc)\r
98 {\r
99    CCrashHandler *pImpl = (CCrashHandler*)lpState;\r
100    CRASH_ASSERT(pImpl);\r
101 \r
102    pImpl->AddRegistryHive(lpHive, lpDesc);\r
103 }\r
104 \r
105 CRASHRPTAPI void RemoveRegistryHiveEx(LPVOID lpState, LPCTSTR lpFile)\r
106 {\r
107    CCrashHandler *pImpl = (CCrashHandler*)lpState;\r
108    CRASH_ASSERT(pImpl);\r
109 \r
110    pImpl->RemoveRegistryHive(lpFile);\r
111 }\r
112 \r
113 \r
114 CRASHRPTAPI void AddEventLogEx(LPVOID lpState, LPCTSTR lpHive, LPCTSTR lpDesc)\r
115 {\r
116    CCrashHandler *pImpl = (CCrashHandler*)lpState;\r
117    CRASH_ASSERT(pImpl);\r
118 \r
119    pImpl->AddEventLog(lpHive, lpDesc);\r
120 }\r
121 \r
122 CRASHRPTAPI void RemoveEventLogEx(LPVOID lpState, LPCTSTR lpFile)\r
123 {\r
124    CCrashHandler *pImpl = (CCrashHandler*)lpState;\r
125    CRASH_ASSERT(pImpl);\r
126 \r
127    pImpl->RemoveEventLog(lpFile);\r
128 }\r
129 \r
130 CRASHRPTAPI void GenerateErrorReportEx(LPVOID lpState, PEXCEPTION_POINTERS pExInfo, BSTR message)\r
131 {\r
132    CCrashHandler *pImpl = (CCrashHandler*)lpState;\r
133    CRASH_ASSERT(pImpl);\r
134 \r
135    if (!pImpl->GenerateErrorReport(pExInfo, message)) {\r
136            DebugBreak();\r
137    }\r
138 }\r
139 \r
140 CRASHRPTAPI void StackTrace ( int numSkip, int depth, TraceCallbackFunction pFunction, CONTEXT *pContext, void *data)\r
141 {\r
142         DoStackTrace(numSkip, depth > 0 ? depth : 9999, pFunction, pContext, data);\r
143 }\r
144 \r
145 // DLL Entry Points usable from Visual Basic\r
146 //  explicit export is required to export undecorated names.\r
147 extern "C" LPVOID  __stdcall InstallExVB(LPGETLOGFILE pfn, LPCTSTR lpcszTo, LPCTSTR lpcszSubject, BOOL bUseUI)\r
148 {\r
149    return InstallEx(pfn, lpcszTo, lpcszSubject, bUseUI);\r
150 }\r
151 \r
152 extern "C" void __stdcall UninstallExVB(LPVOID lpState)\r
153 {\r
154    UninstallEx(lpState);\r
155 }\r
156 \r
157 extern "C" void __stdcall EnableUIVB(void)\r
158 {\r
159         EnableUI();\r
160 }\r
161 \r
162 extern "C" void __stdcall DisableUIVB()\r
163 {\r
164         DisableUI();\r
165 }\r
166 \r
167 extern "C" void __stdcall AddFileExVB(LPVOID lpState, LPCTSTR lpFile, LPCTSTR lpDesc)\r
168 {\r
169    AddFileEx(lpState, lpFile, lpDesc);\r
170 }\r
171 \r
172 extern "C" void __stdcall RemoveFileExVB(LPVOID lpState, LPCTSTR lpFile)\r
173 {\r
174    RemoveFileEx(lpState, lpFile);\r
175 }\r
176 \r
177 extern "C" void __stdcall AddRegistryHiveExVB(LPVOID lpState, LPCTSTR lpRegistryHive, LPCTSTR lpDesc)\r
178 {\r
179    AddRegistryHiveEx(lpState, lpRegistryHive, lpDesc);\r
180 }\r
181 \r
182 extern "C" void __stdcall RemoveRegistryHiveExVB(LPVOID lpState, LPCTSTR lpRegistryHive)\r
183 {\r
184    RemoveRegistryHiveEx(lpState, lpRegistryHive);\r
185 }\r
186 \r
187 extern "C" void __stdcall GenerateErrorReportExVB(LPVOID lpState, PEXCEPTION_POINTERS pExInfo, BSTR message)\r
188 {\r
189    GenerateErrorReportEx(lpState, pExInfo, message);\r
190 }\r
191 \r
192 extern "C" void  __stdcall StackTraceVB(int numSkip, int depth, TraceCallbackFunction pFunction, CONTEXT *pContext, void *data)\r
193 {\r
194         StackTrace(numSkip, depth, pFunction, pContext, data);\r
195 }\r
196 \r
197 // Compatibility interfaces\r
198 CRASHRPTAPI void Install(LPGETLOGFILE pfn, LPCTSTR lpcszTo, LPCTSTR lpcszSubject, BOOL bUseUI)\r
199 {\r
200         (void) InstallEx(pfn, lpcszTo, lpcszSubject, bUseUI);\r
201 }\r
202 \r
203 CRASHRPTAPI void Uninstall()\r
204 {\r
205         UninstallEx(CCrashHandler::GetInstance());\r
206 }\r
207 \r
208 CRASHRPTAPI void EnableUI()\r
209 {\r
210         EnableUIEx(CCrashHandler::GetInstance());\r
211 }\r
212 \r
213 CRASHRPTAPI void DisableUI()\r
214 {\r
215         DisableUIEx(CCrashHandler::GetInstance());\r
216 }\r
217 \r
218 CRASHRPTAPI void AddFile(LPCTSTR lpFile, LPCTSTR lpDesc)\r
219 {\r
220    AddFileEx(CCrashHandler::GetInstance(), lpFile, lpDesc);\r
221 }\r
222 \r
223 CRASHRPTAPI void RemoveFile(LPCTSTR lpFile)\r
224 {\r
225    RemoveFileEx(CCrashHandler::GetInstance(), lpFile);\r
226 }\r
227 \r
228 CRASHRPTAPI void AddRegistryHive(LPCTSTR lpRegistryHive, LPCTSTR lpDesc)\r
229 {\r
230    AddRegistryHiveEx(CCrashHandler::GetInstance(), lpRegistryHive, lpDesc);\r
231 }\r
232 \r
233 CRASHRPTAPI void RemoveRegistryHive(LPCTSTR lpRegistryHive)\r
234 {\r
235    RemoveRegistryHiveEx(CCrashHandler::GetInstance(), lpRegistryHive);\r
236 }\r
237 CRASHRPTAPI void AddEventLog(LPCTSTR lpEventLog, LPCTSTR lpDesc)\r
238 {\r
239    AddEventLogEx(CCrashHandler::GetInstance(), lpEventLog, lpDesc);\r
240 }\r
241 \r
242 CRASHRPTAPI void RemoveEventLog(LPCTSTR lpEventLog)\r
243 {\r
244    RemoveEventLogEx(CCrashHandler::GetInstance(), lpEventLog);\r
245 }\r
246 \r
247 CRASHRPTAPI void GenerateErrorReport(BSTR message)\r
248 {\r
249    GenerateErrorReportEx(CCrashHandler::GetInstance(), NULL, message);\r
250 }\r
251 \r
252 extern "C" void __stdcall InstallVB(LPGETLOGFILE pfn, LPCTSTR lpTo, LPCTSTR lpSubject, BOOL bUseUI)\r
253 {\r
254         Install(pfn, lpTo, lpSubject, bUseUI);\r
255 }\r
256 \r
257 extern "C" void __stdcall UninstallVB()\r
258 {\r
259         Uninstall();\r
260 }\r
261 \r
262 extern "C" void __stdcall AddFileVB(LPCTSTR lpFile, LPCTSTR lpDesc)\r
263 {\r
264         AddFile(lpFile, lpDesc);\r
265 }\r
266 \r
267 extern "C" void __stdcall RemoveFileVB(LPCTSTR lpFile)\r
268 {\r
269         RemoveFile(lpFile);\r
270 }\r
271 \r
272 extern "C" void __stdcall AddRegistryHiveVB(LPCTSTR lpRegistryHive, LPCTSTR lpDesc)\r
273 {\r
274         AddRegistryHive(lpRegistryHive, lpDesc);\r
275 }\r
276 \r
277 extern "C" void __stdcall RemoveRegistryHiveVB(LPCTSTR lpRegistryHive)\r
278 {\r
279         RemoveRegistryHive(lpRegistryHive);\r
280 }\r
281 \r
282 extern "C" void __stdcall AddEventLogVB(LPCTSTR lpEventLog, LPCTSTR lpDesc)\r
283 {\r
284         AddEventLog(lpEventLog, lpDesc);\r
285 }\r
286 \r
287 extern "C" void __stdcall RemoveEventLogVB(LPCTSTR lpEventLog)\r
288 {\r
289         RemoveEventLog(lpEventLog);\r
290 }\r
291 \r
292 extern "C" void __stdcall GenerateErrorReportVB(BSTR message)\r
293 {\r
294         GenerateErrorReport(message);\r
295 }\r
296 \r