mirror of
				https://github.com/netwide-assembler/nasm.git
				synced 2025-10-10 00:25:06 -04:00 
			
		
		
		
	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.)
		
			
				
	
	
		
			52 lines
		
	
	
		
			986 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			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;
 | |
| }
 |