summaryrefslogtreecommitdiffstats
path: root/src/util.cc
diff options
context:
space:
mode:
authorEvan Martin <martine@danga.com>2012-07-27 19:02:59 (GMT)
committerEvan Martin <martine@danga.com>2012-07-27 19:18:08 (GMT)
commitbb6da9afc166e61ea60dacfc4da94b9181ff887b (patch)
treead468f4cec5f73e7e67226eafeae49fc8d58d1f6 /src/util.cc
parent9dd3f0dfdf42cc9eefc10664d747044f50a0ffd8 (diff)
downloadNinja-bb6da9afc166e61ea60dacfc4da94b9181ff887b.zip
Ninja-bb6da9afc166e61ea60dacfc4da94b9181ff887b.tar.gz
Ninja-bb6da9afc166e61ea60dacfc4da94b9181ff887b.tar.bz2
rearrange minidump patch to match ninja code style
Diffstat (limited to 'src/util.cc')
-rw-r--r--src/util.cc79
1 files changed, 0 insertions, 79 deletions
diff --git a/src/util.cc b/src/util.cc
index be74c4d..ca05292 100644
--- a/src/util.cc
+++ b/src/util.cc
@@ -35,7 +35,6 @@
#include <vector>
#ifdef _WIN32
-#include <DbgHelp.h> // for minidump
#include <direct.h> // _mkdir
#endif
@@ -312,81 +311,3 @@ double GetLoadAverage()
return GetLoadAverage_unix();
#endif // _WIN32
}
-
-#ifdef _MSC_VER
-typedef BOOL (WINAPI *MiniDumpWriteDumpFunc) (
- IN HANDLE,
- IN DWORD,
- IN HANDLE,
- IN MINIDUMP_TYPE,
- IN CONST PMINIDUMP_EXCEPTION_INFORMATION, OPTIONAL
- IN CONST PMINIDUMP_USER_STREAM_INFORMATION, OPTIONAL
- IN CONST PMINIDUMP_CALLBACK_INFORMATION OPTIONAL
- );
-
-/// this function creates a windows minidump in temp folder.
-void Create_Win32_MiniDump( _EXCEPTION_POINTERS* pep ) {
- char tempPathBuff[MAX_PATH];
- GetTempPath(sizeof(tempPathBuff), tempPathBuff);
- char tempFileName[MAX_PATH];
- sprintf(tempFileName, "%s\\ninja_crash_dump_%d.dmp", tempPathBuff, GetCurrentProcessId());
-
- //delete any previous minidump of the same name
- DeleteFile(tempFileName);
-
- // load DbgHelp.dll dynamically, as library is not present on all windows versions
- HMODULE hModDbgHelp = LoadLibrary("dbghelp.dll");
- if (hModDbgHelp == NULL) {
- fprintf(stderr, "ninja: failed to create minidump, failed to load dbghelp.dll, error %s \n",
- GetLastErrorString().c_str());
- return;
- }
-
- MiniDumpWriteDumpFunc pfnMiniDumpWriteDump = (MiniDumpWriteDumpFunc)GetProcAddress(hModDbgHelp, "MiniDumpWriteDump");
- if (pfnMiniDumpWriteDump == NULL) {
- fprintf(stderr, "ninja: failed to create minidump, failed on GetProcAddress('MiniDumpWriteDump'), error %s \n",
- GetLastErrorString().c_str());
- return;
- }
-
- // Open the file
- HANDLE hFile = CreateFileA( tempFileName, GENERIC_READ | GENERIC_WRITE,
- 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
- if (hFile == NULL) {
- fprintf(stderr, "ninja: failed to create minidump, failed on CreateFileA(%s), error %s \n",
- tempFileName, GetLastErrorString().c_str());
- return;
- }
-
- // Create the mini dump
- MINIDUMP_EXCEPTION_INFORMATION mdei;
- mdei.ThreadId = GetCurrentThreadId();
- mdei.ExceptionPointers = pep;
- mdei.ClientPointers = FALSE;
- MINIDUMP_TYPE mdt = (MINIDUMP_TYPE) (MiniDumpWithDataSegs | MiniDumpWithHandleData);
-
- BOOL rv = pfnMiniDumpWriteDump( GetCurrentProcess(), GetCurrentProcessId(),
- hFile, mdt, (pep != 0) ? &mdei : 0, 0, 0 );
-
- if ( !rv )
- fprintf(stderr, "ninja: MiniDumpWriteDump failed. Error: %s \n", GetLastErrorString().c_str() );
- else
- fprintf(stderr, "ninja: Minidump created: %s\n", tempFileName );
-
- // Close the file
- CloseHandle( hFile );
-}
-
-/// On Windows, we want to prevent error dialogs in case of exceptions.
-/// This function handles the exception, and writes a minidump.
-int exception_filter(unsigned int code, struct _EXCEPTION_POINTERS *ep) {
- fprintf(stderr, "ninja.exe fatal error: 0x%X \n", code); //e.g. EXCEPTION_ACCESS_VIOLATION
- fflush(stderr);
- Create_Win32_MiniDump(ep);
- return EXCEPTION_EXECUTE_HANDLER;
-}
-#else
- //on Linux or MinGW, core dumps are created automatically, no code needed
-#endif
-
-