extern void stralloc_formatv( stralloc_t* s, const char* fmt, va_list args ) { stralloc_reset(s); stralloc_ready(s,10); while (1) { int n; va_list args2; va_copy(args2, args); n = vsnprintf( s->s, s->a, fmt, args2 ); va_end(args2); /* funky old C libraries returns -1 when truncation occurs */ if (n > -1 && n < s->a) { s->n = n; break; } if (n > -1) { /* we now precisely what we need */ stralloc_ready( s, n+1 ); } else { stralloc_ready( s, s->a*2 ); } } }
void emulator_help( void ) { STRALLOC_DEFINE(out); android_help_main(out); printf( "%.*s", out->n, out->s ); stralloc_reset(out); exit(1); }
extern void stralloc_add_formatv( stralloc_t* s, const char* fmt, va_list args ) { STRALLOC_DEFINE(s2); stralloc_formatv(s2, fmt, args); stralloc_append( s, s2 ); stralloc_reset( s2 ); }