mirror of
https://github.com/netwide-assembler/nasm.git
synced 2024-12-15 09:09:58 +08:00
8960e1bc83
"compiler.h" already includes a bunch of common include files. There is absolutely no reason to duplicate them in individual files, and in fact it robs us of central control of how these files are used. Signed-off-by: H. Peter Anvin <hpa@zytor.com>
47 lines
968 B
C
47 lines
968 B
C
/*
|
|
* vsnprintf()
|
|
*
|
|
* Poor substitute for a real vsnprintf() function for systems
|
|
* that don't have them...
|
|
*/
|
|
|
|
#include "compiler.h"
|
|
|
|
|
|
#include "nasmlib.h"
|
|
#include "error.h"
|
|
|
|
#if !defined(HAVE_VSNPRINTF) && !defined(HAVE__VSNPRINTF)
|
|
|
|
#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_panic("vsnprintf: size (%d) > BUFFER_SIZE (%d)",
|
|
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
|