diff --git a/mongoose.c b/mongoose.c index 3a2594c9..9a842d90 100644 --- a/mongoose.c +++ b/mongoose.c @@ -2667,6 +2667,7 @@ size_t mg_vxprintf(void (*out)(char, void *), void *param, const char *fmt, is_long++, c = fmt[++i]; if (c == 'l') is_long++, c = fmt[++i]; } + if (c == 'z') is_long = 1, c = fmt[++i]; if (c == 'p') x = 1, is_long = 1; if (c == 'd' || c == 'u' || c == 'x' || c == 'X' || c == 'p' || c == 'g' || c == 'f') { diff --git a/src/fmt.c b/src/fmt.c index 4d197cfe..0f19e691 100644 --- a/src/fmt.c +++ b/src/fmt.c @@ -173,6 +173,7 @@ size_t mg_vxprintf(void (*out)(char, void *), void *param, const char *fmt, is_long++, c = fmt[++i]; if (c == 'l') is_long++, c = fmt[++i]; } + if (c == 'z') is_long = 1, c = fmt[++i]; if (c == 'p') x = 1, is_long = 1; if (c == 'd' || c == 'u' || c == 'x' || c == 'X' || c == 'p' || c == 'g' || c == 'f') { diff --git a/test/unit_test.c b/test/unit_test.c index ef697646..9f3c9aff 100644 --- a/test/unit_test.c +++ b/test/unit_test.c @@ -2321,6 +2321,19 @@ static void test_str(void) { ASSERT(chkdbl(mg_str("123e-3"), 0.123)); } +#if defined(_MSC_VER) && _MSC_VER < 1700 + // VC98 does not have '%zu' +#else + ASSERT(sn("%zu", 0)); + ASSERT(sn("%zu", -1)); + ASSERT(sn("%zu", -2)); + ASSERT(sn("%zd", 123)); +#if !defined(_MSC_VER) + ASSERT(sn("%zd", -3)); // MSVC casts to unsigned +#endif + ASSERT(sn("%zu", 0x1234)); +#endif + ASSERT(sn("%d", 0)); ASSERT(sn("%d", 1)); ASSERT(sn("%d", -1));