void fz_vprintf(fz_context *ctx, fz_output *out, const char *fmt, va_list old_args) { char buffer[256], *p = buffer; int len; va_list args; if (!out) return; /* First try using our fixed size buffer */ va_copy(args, old_args); len = fz_vsnprintf(buffer, sizeof buffer, fmt, args); va_copy_end(args); /* If that failed, allocate a big enough buffer */ if (len > sizeof buffer) { p = fz_malloc(ctx, len); va_copy(args, old_args); fz_vsnprintf(p, len, fmt, args); va_copy_end(args); } fz_try(ctx) out->write(ctx, out->opaque, p, len); fz_always(ctx) if (p != buffer) fz_free(ctx, p); fz_catch(ctx) fz_rethrow(ctx); }
void fz_vwarn(fz_context *ctx, const char *fmt, va_list ap) { char buf[sizeof ctx->warn->message]; fz_vsnprintf(buf, sizeof buf, fmt, ap); buf[sizeof(buf) - 1] = 0; #ifdef USE_OUTPUT_DEBUG_STRING OutputDebugStringA(buf); OutputDebugStringA("\n"); #endif #ifdef USE_ANDROID_LOG __android_log_print(ANDROID_LOG_WARN, "libmupdf", "%s", buf); #endif if (!strcmp(buf, ctx->warn->message)) { ctx->warn->count++; } else { fz_flush_warnings(ctx); fprintf(stderr, "warning: %s\n", buf); fz_strlcpy(ctx->warn->message, buf, sizeof ctx->warn->message); ctx->warn->count = 1; } }
static void pdfapp_warn(pdfapp_t *app, const char *fmt, ...) { char buf[1024]; va_list ap; va_start(ap, fmt); fz_vsnprintf(buf, sizeof(buf), fmt, ap); va_end(ap); buf[sizeof(buf)-1] = 0; winwarn(app, buf); }