@@ -167,12 +167,17 @@ } break; case 'l': /* and also ll */ if (ctx->fmt_len > ctx->i + 1 && ctx->fmt[ctx->i + 1] == 'l') { +#ifndef _WIN32 if (!append_subfmt(ctx, ctx->fmt + ctx->i, 2)) return false; +#else + if (!append_subfmt(ctx, "I64", 3)) + return false; +#endif ctx->i++; ctx->len_mod = LENGTH_MODIFIER_LL; } else { if (!append_subfmt(ctx, ctx->fmt + ctx->i, 1)) @@ -181,12 +186,17 @@ ctx->len_mod = LENGTH_MODIFIER_L; } break; case 'j': +#ifndef _WIN32 if (!append_subfmt(ctx, ctx->fmt + ctx->i, 1)) return false; +#else + if (!append_subfmt(ctx, "I64", 3)) + return false; +#endif ctx->len_mod = LENGTH_MODIFIER_J; break; case 'z': @@ -208,10 +218,24 @@ return false; ctx->len_mod = LENGTH_MODIFIER_CAPITAL_L; break; +#ifdef _WIN32 + case 'I': /* win32 strangeness (I64 instead of ll or j) */ + if (ctx->fmt_len > ctx->i + 2 && ctx->fmt[ctx->i + 1] == '6' && + ctx->fmt[ctx->i + 2] == '4') { + if (!append_subfmt(ctx, ctx->fmt + ctx->i, 3)) + return false; + + ctx->i += 2; + ctx->len_mod = LENGTH_MODIFIER_LL; + } else + ctx->i--; + + break; +#endif default: ctx->i--; break; }