diff options
Diffstat (limited to 'src/txtacc.c')
-rw-r--r-- | src/txtacc.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/txtacc.c b/src/txtacc.c index c094c22..91659f6 100644 --- a/src/txtacc.c +++ b/src/txtacc.c @@ -121,11 +121,12 @@ txtacc_grow (struct txtacc *acc, const char *buf, size_t size) } char * -txtacc_finish (struct txtacc *acc) +txtacc_finish (struct txtacc *acc, int steal) { struct grecs_list_entry *ep; struct txtacc_entry *txtent; size_t size; + char *p; switch (grecs_list_size (acc->cur)) { @@ -135,7 +136,6 @@ txtacc_finish (struct txtacc *acc) case 1: txtent = acc->cur->head->data; acc->cur->head->data = NULL; - grecs_list_append (acc->mem, txtent); txtacc_entry_tailor (txtent); break; @@ -156,7 +156,12 @@ txtacc_finish (struct txtacc *acc) } grecs_list_clear (acc->cur); - return txtent->buf; + p = txtent->buf; + if (steal) + free (txtent); + else + grecs_list_append (acc->mem, txtent); + return p; } void |