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 */