32 lines
449 B
C
32 lines
449 B
C
/*
|
|
* asprintf.c
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <stdarg.h>
|
|
|
|
int asprintf(char **bufp, const char *format, ...)
|
|
{
|
|
va_list ap, ap1;
|
|
int rv;
|
|
int bytes;
|
|
char *p;
|
|
|
|
va_start(ap, format);
|
|
va_copy(ap1, ap);
|
|
|
|
bytes = vsnprintf(NULL, 0, format, ap1) + 1;
|
|
va_end(ap1);
|
|
|
|
*bufp = p = malloc(bytes);
|
|
if (!p)
|
|
rv = -1;
|
|
else
|
|
rv = vsnprintf(p, bytes, format, ap);
|
|
|
|
va_end(ap);
|
|
|
|
return rv;
|
|
}
|