X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=common%2Fos_win32.cpp;h=05a7a46c37d89ef33f812c79995732d6e6358ac3;hb=d6b7eb6b7c8280762fb635a6e63aa3a426694ed7;hp=e00fe64bd50edeacb197d8f04a704b3bf83b9bfc;hpb=8ba4a4a5748f36240f7c98196941993b348f56e1;p=apitrace diff --git a/common/os_win32.cpp b/common/os_win32.cpp index e00fe64..05a7a46 100644 --- a/common/os_win32.cpp +++ b/common/os_win32.cpp @@ -23,6 +23,8 @@ * **************************************************************************/ +#ifdef _WIN32 + #include #include @@ -42,7 +44,7 @@ String getProcessName(void) { String path; - size_t size = MAX_PATH; + DWORD size = MAX_PATH; char *buf = path.buf(size); DWORD nWritten = GetModuleFileNameA(NULL, buf, size); @@ -57,7 +59,7 @@ String getCurrentDir(void) { String path; - size_t size = MAX_PATH; + DWORD size = MAX_PATH; char *buf = path.buf(size); DWORD ret = GetCurrentDirectoryA(size, buf); @@ -69,6 +71,12 @@ getCurrentDir(void) return path; } +bool +createDirectory(const String &path) +{ + return CreateDirectoryA(path, NULL); +} + bool String::exists(void) const { @@ -125,7 +133,6 @@ quoteArg(std::string &s, const char *arg) s.push_back('"'); while (true) { c = *arg++; - switch (c) if (c == '\0') { break; } else if (c == '"') { @@ -167,7 +174,7 @@ int execute(char * const * args) sep = ' '; } - STARTUPINFO startupInfo; + STARTUPINFOA startupInfo; memset(&startupInfo, 0, sizeof(startupInfo)); startupInfo.cb = sizeof(startupInfo); @@ -190,7 +197,7 @@ int execute(char * const * args) WaitForSingleObject(processInformation.hProcess, INFINITE); - DWORD exitCode = ~0; + DWORD exitCode = ~0UL; GetExitCodeProcess(processInformation.hProcess, &exitCode); CloseHandle(processInformation.hProcess); @@ -230,11 +237,7 @@ long long timeFrequency = 0LL; void abort(void) { -#ifndef NDEBUG - DebugBreak(); -#else - ExitProcess(0); -#endif + TerminateProcess(GetCurrentProcess(), 1); } @@ -276,6 +279,15 @@ unhandledExceptionHandler(PEXCEPTION_POINTERS pExceptionInfo) return EXCEPTION_CONTINUE_SEARCH; } + /* + * Ignore .NET exception. + * + * http://ig2600.blogspot.co.uk/2011/01/why-do-i-keep-getting-exception-code.html + */ + if (pExceptionRecord->ExceptionCode == 0xe0434352) { + return EXCEPTION_CONTINUE_SEARCH; + } + // Clear direction flag #ifdef _MSC_VER #ifndef _WIN64 @@ -291,7 +303,7 @@ unhandledExceptionHandler(PEXCEPTION_POINTERS pExceptionInfo) static int recursion_count = 0; if (recursion_count) { - fprintf(stderr, "apitrace: warning: recursion handling exception\n"); + fputs("apitrace: warning: recursion handling exception\n", stderr); } else { if (gCallback) { ++recursion_count; @@ -328,3 +340,5 @@ resetExceptionCallback(void) } /* namespace os */ + +#endif // defined(_WIN32)