| // Copyright 2021 Joe Drago. All rights reserved. |
| // SPDX-License-Identifier: BSD-2-Clause |
| |
| #include "avif/internal.h" |
| |
| #include <stdarg.h> |
| #include <stdio.h> |
| #include <string.h> |
| |
| void avifDiagnosticsClearError(avifDiagnostics * diag) |
| { |
| *diag->error = '\0'; |
| } |
| |
| #ifdef __clang__ |
| __attribute__((__format__(__printf__, 2, 3))) |
| #endif |
| void avifDiagnosticsPrintf(avifDiagnostics * diag, const char * format, ...) |
| { |
| if (!diag) { |
| // It is possible this is NULL (e.g. calls to avifPeekCompatibleFileType()) |
| return; |
| } |
| if (*diag->error) { |
| // There is already a detailed error set. |
| return; |
| } |
| |
| va_list args; |
| va_start(args, format); |
| vsnprintf(diag->error, AVIF_DIAGNOSTICS_ERROR_BUFFER_SIZE, format, args); |
| diag->error[AVIF_DIAGNOSTICS_ERROR_BUFFER_SIZE - 1] = '\0'; |
| va_end(args); |
| } |