nasm/lib/vsnprintf.c
H. Peter Anvin fe501957c0 Portability fixes
Concentrate compiler dependencies to compiler.h; make sure compiler.h
is included first in every .c file (since some prototypes may depend
on the presence of feature request macros.)

Actually use the conditional inclusion of various functions (totally
broken in previous releases.)
2007-10-02 21:53:51 -07:00

52 lines
986 B
C

/*
* vsnprintf()
*
* Poor substitute for a real vsnprintf() function for systems
* that don't have them...
*/
#include "compiler.h"
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include "nasmlib.h"
extern efunc nasm_malloc_error;
#define BUFFER_SIZE 65536 /* Bigger than any string we might print... */
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_malloc_error(ERR_PANIC|ERR_NOFILE,
"snprintf: size (%d) > BUFFER_SIZE (%d)",
size, BUFFER_SIZE);
size = BUFFER_SIZE;
}
rv = vsprintf(snprintf_buffer, format, ap);
if (rv >= BUFFER_SIZE) {
nasm_malloc_error(ERR_PANIC|ERR_NOFILE,
"snprintf 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;
}