Files
bongo/import/log4c/sd/sprintf.c
T
2007-01-22 23:37:12 +00:00

59 lines
1.3 KiB
C

static const char version[] = "$Id: sprintf.c,v 1.4 2005/12/15 22:05:09 rbyrne Exp $";
/*
* Copyright 2001-2003, Meiosys (www.meiosys.com). All rights reserved.
*
* See the COPYING file for the terms of usage and distribution.
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <sd/sprintf.h>
#include <sd/malloc.h>
#include <sd/sd_xplatform.h>
/******************************************************************************/
extern char* sd_sprintf(const char* a_fmt, ...)
{
char* buffer;
va_list args;
va_start(args, a_fmt);
buffer = sd_vsprintf(a_fmt, args);
va_end(args);
return buffer;
}
/******************************************************************************/
extern char* sd_vsprintf(const char* a_fmt, va_list a_args)
{
int size = 1024;
char* buffer = sd_calloc(size, sizeof(char));
while (1) {
int n = vsnprintf(buffer, size, a_fmt, a_args);
/* If that worked, return */
if (n > -1 && n < size)
return buffer;
/* Else try again with more space. */
if (n > -1) /* ISO/IEC 9899:1999 */
size = n + 1;
else /* twice the old size */
size *= 2;
buffer = sd_realloc(buffer, size);
}
}
#if defined(__osf__)
# ifndef snprintf
# include "sprintf.osf.c"
# endif
#endif