X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=common%2Fos_win32.cpp;h=e9306cdc6dfa0168b3bca328d5511b66bb551932;hb=HEAD;hp=7e1a544a163597997130251f0f269ebfb63b2342;hpb=70960ea0d810635d3a189b326c5fbd84fba97f33;p=apitrace diff --git a/common/os_win32.cpp b/common/os_win32.cpp index 7e1a544..e9306cd 100644 --- a/common/os_win32.cpp +++ b/common/os_win32.cpp @@ -38,29 +38,6 @@ namespace os { -/* - * Trick from http://locklessinc.com/articles/pthreads_on_windows/ - */ -static CRITICAL_SECTION -criticalSection = { - (PCRITICAL_SECTION_DEBUG)-1, -1, 0, 0, 0, 0 -}; - - -void -acquireMutex(void) -{ - EnterCriticalSection(&criticalSection); -} - - -void -releaseMutex(void) -{ - LeaveCriticalSection(&criticalSection); -} - - String getProcessName(void) { @@ -99,6 +76,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. */ @@ -136,7 +125,6 @@ quoteArg(std::string &s, const char *arg) s.push_back('"'); while (true) { c = *arg++; - switch (c) if (c == '\0') { break; } else if (c == '"') { @@ -201,7 +189,7 @@ int execute(char * const * args) WaitForSingleObject(processInformation.hProcess, INFINITE); - DWORD exitCode = ~0; + DWORD exitCode = ~0UL; GetExitCodeProcess(processInformation.hProcess, &exitCode); CloseHandle(processInformation.hProcess); @@ -236,16 +224,7 @@ log(const char *format, ...) #endif } -long long -getTime(void) -{ - static LARGE_INTEGER frequency; - LARGE_INTEGER counter; - if (!frequency.QuadPart) - QueryPerformanceFrequency(&frequency); - QueryPerformanceCounter(&counter); - return counter.QuadPart*1000000LL/frequency.QuadPart; -} +long long timeFrequency = 0LL; void abort(void) @@ -258,6 +237,10 @@ abort(void) } +#ifndef DBG_PRINTEXCEPTION_C +#define DBG_PRINTEXCEPTION_C 0x40010006 +#endif + static PVOID prevExceptionFilter = NULL; static void (*gCallback)(void) = NULL; @@ -283,11 +266,31 @@ 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 __asm { cld }; +#endif #else asm("cld"); #endif