X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=common%2Fos_win32.cpp;h=c5be8a88efb190f904d2af4fd098e77cbfab1093;hb=9ca97158a7297fbdcf86635adf81feb2a3385055;hp=199ae5a7e4a656be9b41c24d8c53090acabe0360;hpb=48412ffde3dd4710c96d5e8d9cfdf1789e4d703a;p=apitrace diff --git a/common/os_win32.cpp b/common/os_win32.cpp index 199ae5a..c5be8a8 100644 --- a/common/os_win32.cpp +++ b/common/os_win32.cpp @@ -69,6 +69,12 @@ getCurrentDir(void) return path; } +bool +createDirectory(const String &path) +{ + return CreateDirectoryA(path, NULL); +} + bool String::exists(void) const { @@ -76,6 +82,18 @@ String::exists(void) const return attrs != INVALID_FILE_ATTRIBUTES; } +bool +copyFile(const String &srcFileName, const String &dstFileName, bool override) +{ + return CopyFileA(srcFileName, dstFileName, !override); +} + +bool +removeFile(const String &srcFilename) +{ + return DeleteFileA(srcFilename); +} + /** * Determine whether an argument should be quoted. */ @@ -113,7 +131,6 @@ quoteArg(std::string &s, const char *arg) s.push_back('"'); while (true) { c = *arg++; - switch (c) if (c == '\0') { break; } else if (c == '"') { @@ -178,7 +195,7 @@ int execute(char * const * args) WaitForSingleObject(processInformation.hProcess, INFINITE); - DWORD exitCode = ~0; + DWORD exitCode = ~0UL; GetExitCodeProcess(processInformation.hProcess, &exitCode); CloseHandle(processInformation.hProcess); @@ -218,11 +235,7 @@ long long timeFrequency = 0LL; void abort(void) { -#ifndef NDEBUG - DebugBreak(); -#else - ExitProcess(0); -#endif + TerminateProcess(GetCurrentProcess(), 1); } @@ -255,6 +268,24 @@ unhandledExceptionHandler(PEXCEPTION_POINTERS pExceptionInfo) return EXCEPTION_CONTINUE_SEARCH; } + /* + * Ignore thread naming exception. + * + * http://msdn.microsoft.com/en-us/library/xcb2z8hs.aspx + */ + if (pExceptionRecord->ExceptionCode == 0x406d1388) { + 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 @@ -270,7 +301,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;