61 lines
		
	
	
		
			957 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			957 B
		
	
	
	
		
			C++
		
	
	
	
	
	
#include <new>
 | 
						|
#include <stdio.h>
 | 
						|
#include <stdlib.h>
 | 
						|
#include "platform_util.h"
 | 
						|
 | 
						|
size_t Sp_Format(char *buffer, size_t maxlength, const char *fmt, ...)
 | 
						|
{
 | 
						|
	size_t len;
 | 
						|
 | 
						|
	va_list ap;
 | 
						|
	va_start(ap, fmt);
 | 
						|
	len = Sp_FormatArgs(buffer, maxlength, fmt, ap);
 | 
						|
	va_end(ap);
 | 
						|
 | 
						|
	return len;
 | 
						|
}
 | 
						|
 | 
						|
size_t Sp_FormatArgs(char *buffer, size_t maxlength, const char *fmt, va_list ap)
 | 
						|
{
 | 
						|
	size_t len;
 | 
						|
 | 
						|
	len = vsnprintf(buffer, maxlength, fmt, ap);
 | 
						|
 | 
						|
	if (len >= maxlength)
 | 
						|
	{
 | 
						|
		buffer[maxlength - 1] = '\0';
 | 
						|
		return (maxlength - 1);
 | 
						|
	}
 | 
						|
	else
 | 
						|
	{
 | 
						|
		return len;
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
/* Overload a few things to prevent libstdc++ linking */
 | 
						|
#if defined __linux__
 | 
						|
extern "C" void __cxa_pure_virtual(void)
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
void *operator new(size_t size)
 | 
						|
{
 | 
						|
	return malloc(size);
 | 
						|
}
 | 
						|
 | 
						|
void *operator new[](size_t size) 
 | 
						|
{
 | 
						|
	return malloc(size);
 | 
						|
}
 | 
						|
 | 
						|
void operator delete(void *ptr) 
 | 
						|
{
 | 
						|
	free(ptr);
 | 
						|
}
 | 
						|
 | 
						|
void operator delete[](void * ptr)
 | 
						|
{
 | 
						|
	free(ptr);
 | 
						|
}
 | 
						|
#endif
 |