#include "compiler.h"
#include "nasmlib.h"
#include "error.h"
#if !defined(HAVE_VSNPRINTF) && !defined(HAVE__VSNPRINTF)
#define BUFFER_SIZE …
static char snprintf_buffer[BUFFER_SIZE];
int vsnprintf(char *str, size_t size, const char *format, va_list ap)
{
int rv, bytes;
if (size > BUFFER_SIZE) {
nasm_panic("vsnprintf: size (%llu) > BUFFER_SIZE (%d)",
(unsigned long long)size, BUFFER_SIZE);
size = BUFFER_SIZE;
}
rv = vsprintf(snprintf_buffer, format, ap);
if (rv >= BUFFER_SIZE)
nasm_panic("vsnprintf buffer overflow");
if (size > 0) {
if ((size_t)rv < size-1)
bytes = rv;
else
bytes = size-1;
memcpy(str, snprintf_buffer, bytes);
str[bytes] = '\0';
}
return rv;
}
#endif