Merge pull request #433 from compnerd/static-build

build: make the static build work well
diff --git a/src/init.c b/src/init.c
index 5153ae4..11dabb9 100644
--- a/src/init.c
+++ b/src/init.c
@@ -709,7 +709,7 @@
 			char path[MAX_PATH + 1] = {0};
 			DWORD dwLength = GetTempPathA(MAX_PATH, path);
 			dispatch_assert(dwLength <= MAX_PATH + 1);
-			snprintf(&path[dwLength], MAX_PATH - dwLength, "libdispatch.%d.log",
+			snprintf(&path[dwLength], MAX_PATH - dwLength, "libdispatch.%lu.log",
 					GetCurrentProcessId());
 			dispatch_logfile = _open(path, O_WRONLY | O_APPEND | O_CREAT, 0666);
 #else
diff --git a/src/internal.h b/src/internal.h
index bde3d4f..43aeb9f 100644
--- a/src/internal.h
+++ b/src/internal.h
@@ -295,6 +295,7 @@
 #include <io.h>
 #include <crtdbg.h>
 #endif
+#include <inttypes.h>
 
 #if defined(__GNUC__) || defined(__clang__)
 #define DISPATCH_NOINLINE __attribute__((__noinline__))
diff --git a/src/io.c b/src/io.c
index 3cfe40b..23a07bf 100644
--- a/src/io.c
+++ b/src/io.c
@@ -2568,11 +2568,11 @@
 _dispatch_io_debug_attr(dispatch_io_t channel, char* buf, size_t bufsiz)
 {
 	dispatch_queue_t target = channel->do_targetq;
-	return dsnprintf(buf, bufsiz, "type = %s, fd = 0x%x, %sfd_entry = %p, "
+	return dsnprintf(buf, bufsiz, "type = %s, fd = 0x%" PRIxPTR ", %sfd_entry = %p, "
 			"queue = %p, target = %s[%p], barrier_queue = %p, barrier_group = "
 			"%p, err = 0x%x, low = 0x%zx, high = 0x%zx, interval%s = %llu ",
 			channel->params.type == DISPATCH_IO_STREAM ? "stream" : "random",
-			channel->fd_actual, channel->atomic_flags & DIO_STOPPED ?
+			(intptr_t)channel->fd_actual, channel->atomic_flags & DIO_STOPPED ?
 			"stopped, " : channel->atomic_flags & DIO_CLOSED ? "closed, " : "",
 			channel->fd_entry, channel->queue, target && target->dq_label ?
 			target->dq_label : "", target, channel->barrier_queue,
@@ -2601,13 +2601,13 @@
 {
 	dispatch_queue_t target = op->do_targetq;
 	dispatch_queue_t oqtarget = op->op_q ? op->op_q->do_targetq : NULL;
-	return dsnprintf(buf, bufsiz, "type = %s %s, fd = 0x%x, fd_entry = %p, "
+	return dsnprintf(buf, bufsiz, "type = %s %s, fd = 0x%" PRIxPTR ", fd_entry = %p, "
 			"channel = %p, queue = %p -> %s[%p], target = %s[%p], "
 			"offset = %lld, length = %zu, done = %zu, undelivered = %zu, "
 			"flags = %u, err = 0x%x, low = 0x%zx, high = 0x%zx, "
 			"interval%s = %llu ", op->params.type == DISPATCH_IO_STREAM ?
 			"stream" : "random", op->direction == DOP_DIR_READ ? "read" :
-			"write", op->fd_entry ? op->fd_entry->fd : -1, op->fd_entry,
+			"write", (intptr_t)(op->fd_entry ? op->fd_entry->fd : -1), op->fd_entry,
 			op->channel, op->op_q, oqtarget && oqtarget->dq_label ?
 			oqtarget->dq_label : "", oqtarget, target && target->dq_label ?
 			target->dq_label : "", target, (long long)op->offset, op->length,
diff --git a/src/queue.c b/src/queue.c
index cf0fdc6..b1b4458 100644
--- a/src/queue.c
+++ b/src/queue.c
@@ -6435,7 +6435,9 @@
 {
 	// never returns, so burn bridges behind us
 	_dispatch_clear_stack(0);
-#if !defined(_WIN32)
+#if defined(_WIN32)
+	for (;;) SuspendThread(GetCurrentThread());
+#else
 	_dispatch_sigsuspend();
 #endif
 }
diff --git a/src/semaphore.c b/src/semaphore.c
index 0bdd049..5fea942 100644
--- a/src/semaphore.c
+++ b/src/semaphore.c
@@ -87,7 +87,7 @@
 			dsema->dsema_sema);
 #endif
 	offset += dsnprintf(&buf[offset], bufsiz - offset,
-			"value = %ld, orig = %ld }", dsema->dsema_value, dsema->dsema_orig);
+			"value = %" PRId64 ", orig = %" PRId64 " }", dsema->dsema_value, dsema->dsema_orig);
 	return offset;
 }
 
@@ -272,7 +272,7 @@
 			dg->dg_sema);
 #endif
 	offset += dsnprintf(&buf[offset], bufsiz - offset,
-			"count = %ld, waiters = %d }", dg->dg_value, dg->dg_waiters);
+			"count = %" PRId64 ", waiters = %d }", dg->dg_value, dg->dg_waiters);
 	return offset;
 }