Address Windwos compilation issues.
diff --git a/regress/liboverride-test.c b/regress/liboverride-test.c
index f00f3d7..7cfc922 100644
--- a/regress/liboverride-test.c
+++ b/regress/liboverride-test.c
@@ -33,6 +33,14 @@
 */
 
 #include <stdlib.h>
+
+#ifdef _WIN32
+int main(int argc, const char *argv[]) {
+    /* Symbol override is not supported on Windows. */
+    exit(1);
+}
+#else
+
 #include <unistd.h>
 
 #include "zip.h"
@@ -63,3 +71,5 @@
     
     exit(0);
 }
+
+#endif /* not Windows */
diff --git a/src/diff_output.c b/src/diff_output.c
index b93a1ea..fa07722 100644
--- a/src/diff_output.c
+++ b/src/diff_output.c
@@ -73,10 +73,10 @@
 
 #define MAX_BYTES 64
 void diff_output_data(diff_output_t *output, int side, const zip_uint8_t *data, zip_uint64_t data_length, const char *fmt, ...) {
+    char prefix[1024];
     char hexdata[MAX_BYTES * 3 + 6];
     size_t i, offset;
     va_list ap;
-    char *prefix;
 
     if (!output->verbose) {
         return;
@@ -98,8 +98,9 @@
     hexdata[offset] = '\0';
     
     va_start(ap, fmt);
-    vasprintf(&prefix, fmt, ap);
+    vsnprintf(&prefix, sizeof(prefix), fmt, ap);
     va_end(ap);
+    prefix[sizeof(prefix) - 1] = '\0';
     
     diff_output(output, side, "%s, length %" PRIu64 ", data %s", prefix, data_length, hexdata);
     
diff --git a/src/diff_output.h b/src/diff_output.h
index 6ed9396..8ac12b8 100644
--- a/src/diff_output.h
+++ b/src/diff_output.h
@@ -11,13 +11,18 @@
     int verbose;
 } diff_output_t;
 
+#if defined(__GNUC__) && __GNUC__ >= 4
+#define PRINTF_LIKE(n, m) __attribute__((__format__(__printf__, n, m)))
+#else
+#define PRINTF_LIKE(n, m)
+#endif
+
 void diff_output_init(diff_output_t *output, int verbose, char *const archive_names[]);
 void diff_output_start_file(diff_output_t *output, const char *name, zip_uint64_t size, zip_uint32_t crc);
 void diff_output_end_file(diff_output_t *output);
 
-void diff_output(diff_output_t *output, int side, const char *fmt, ...) __attribute__((__format__(__printf__, 3, 4)));
-void diff_output_data(diff_output_t *output, int side, const zip_uint8_t *data, zip_uint64_t data_length, const char *fmt, ...) __attribute__((__format__(__printf__, 5, 6)));
+void diff_output(diff_output_t *output, int side, const char *fmt, ...) PRINTF_LIKE(3, 4);
+void diff_output_data(diff_output_t *output, int side, const zip_uint8_t *data, zip_uint64_t data_length, const char *fmt, ...) PRINTF_LIKE(5, 6);
 void diff_output_file(diff_output_t *output, char side, const char *name, zip_uint64_t size, zip_uint32_t crc);
 
-
 #endif /* HAD_DIFF_OUTPUT_H */