@@ -19,11 +19,10 @@ #define _GNU_SOURCE #include #include #include #include -#include #include #import "OFString.h" #import "OFAutoreleasePool.h" #import "asprintf.h" @@ -395,32 +394,35 @@ break; case 'n': switch (ctx->len_mod) { case LENGTH_MODIFIER_NONE: - *va_arg(ctx->args, int*) = ctx->buf_len; + *va_arg(ctx->args, int*) = (int)ctx->buf_len; break; case LENGTH_MODIFIER_HH: - *va_arg(ctx->args, signed char*) = ctx->buf_len; + *va_arg(ctx->args, signed char*) = + (signed char)ctx->buf_len; break; case LENGTH_MODIFIER_H: - *va_arg(ctx->args, short*) = ctx->buf_len; + *va_arg(ctx->args, short*) = (short)ctx->buf_len; break; case LENGTH_MODIFIER_L: - *va_arg(ctx->args, long*) = ctx->buf_len; + *va_arg(ctx->args, long*) = (long)ctx->buf_len; break; case LENGTH_MODIFIER_LL: - *va_arg(ctx->args, long long*) = ctx->buf_len; + *va_arg(ctx->args, long long*) = + (long long)ctx->buf_len; break; case LENGTH_MODIFIER_J: - *va_arg(ctx->args, intmax_t*) = ctx->buf_len; + *va_arg(ctx->args, intmax_t*) = (intmax_t)ctx->buf_len; break; case LENGTH_MODIFIER_Z: *va_arg(ctx->args, size_t*) = ctx->buf_len; break; case LENGTH_MODIFIER_T: - *va_arg(ctx->args, ptrdiff_t*) = ctx->buf_len; + *va_arg(ctx->args, ptrdiff_t*) = + (ptrdiff_t)ctx->buf_len; break; default: return false; } @@ -503,11 +505,11 @@ } ctx.buf[ctx.buf_len] = 0; *ret = ctx.buf; - return ctx.buf_len; + return (ctx.buf_len <= INT_MAX ? (int)ctx.buf_len : INT_MAX); } int of_asprintf(char **ret, const char *fmt, ...) {