*
**************************************************************************/
+#ifdef _WIN32
+
#include <windows.h>
#include <assert.h>
getProcessName(void)
{
String path;
- size_t size = MAX_PATH;
+ DWORD size = MAX_PATH;
char *buf = path.buf(size);
DWORD nWritten = GetModuleFileNameA(NULL, buf, size);
getCurrentDir(void)
{
String path;
- size_t size = MAX_PATH;
+ DWORD size = MAX_PATH;
char *buf = path.buf(size);
DWORD ret = GetCurrentDirectoryA(size, buf);
return path;
}
+bool
+createDirectory(const String &path)
+{
+ return CreateDirectoryA(path, NULL);
+}
+
bool
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.
*/
s.push_back('"');
while (true) {
c = *arg++;
- switch (c)
if (c == '\0') {
break;
} else if (c == '"') {
sep = ' ';
}
- STARTUPINFO startupInfo;
+ STARTUPINFOA startupInfo;
memset(&startupInfo, 0, sizeof(startupInfo));
startupInfo.cb = sizeof(startupInfo);
WaitForSingleObject(processInformation.hProcess, INFINITE);
- DWORD exitCode = ~0;
+ DWORD exitCode = ~0UL;
GetExitCodeProcess(processInformation.hProcess, &exitCode);
CloseHandle(processInformation.hProcess);
#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)
{
-#ifndef NDEBUG
- DebugBreak();
-#else
- ExitProcess(0);
-#endif
+ TerminateProcess(GetCurrentProcess(), 1);
}
+#ifndef DBG_PRINTEXCEPTION_C
+#define DBG_PRINTEXCEPTION_C 0x40010006
+#endif
+
static PVOID prevExceptionFilter = NULL;
static void (*gCallback)(void) = NULL;
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
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;
} /* namespace os */
+
+#endif // defined(_WIN32)