Mercurial > repo
view nasmbuild/nasm-2.13rc9/stdlib/vsnprintf.c @ 10956:9dd7da70ae81
<shachaf> swrjan s,arch,arc,
author | HackBot |
---|---|
date | Fri, 26 May 2017 00:32:44 +0000 |
parents | 587a0a262d22 |
children |
line wrap: on
line source
/* * 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" #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(ERR_NOFILE, "vsnprintf: size (%d) > BUFFER_SIZE (%d)", size, BUFFER_SIZE); size = BUFFER_SIZE; } rv = vsprintf(snprintf_buffer, format, ap); if (rv >= BUFFER_SIZE) nasm_panic(ERR_NOFILE, "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