8
int dyn_init(DYN_STRING *ds,int reserve_size) // {{{
11
assert(reserve_size>0);
14
ds->alloc=reserve_size;
15
ds->buf=malloc(ds->alloc+1);
17
fprintf(stderr,"Bad alloc: %m\n");
26
void dyn_free(DYN_STRING *ds) // {{{
37
int dyn_ensure(DYN_STRING *ds,int free_space) // {{{
45
if (ds->alloc - ds->len >= free_space) {
48
ds->alloc+=free_space;
49
char *tmp=realloc(ds->buf,ds->alloc+1);
52
fprintf(stderr,"Bad alloc: %m\n");
61
inline int dyn_vprintf(DYN_STRING *ds,const char *fmt,va_list ap) // {{{
65
int need,len=strlen(fmt)+100;
68
if (dyn_ensure(ds,len)==-1) {
74
need=vsnprintf(ds->buf+ds->len,ds->alloc-ds->len+1,fmt,va);
78
} else if (need>=len) {
84
if (dyn_ensure(ds,len)==-1) {
92
int dyn_printf(DYN_STRING *ds,const char *fmt,...) // {{{
98
ret=dyn_vprintf(ds,fmt,va);