diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-05-12 00:05:00 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-05-12 00:05:00 +0300 |
commit | f569a6f2628b9ddef4dfb4424aff2dad644a8f19 (patch) | |
tree | 6d6e5b03bc97198c2002703591fe5e751978130c /src/txtacc.c | |
parent | 590e208c40797206fd6a93651fc59e0b68eeb545 (diff) | |
download | wydawca-f569a6f2628b9ddef4dfb4424aff2dad644a8f19.tar.gz wydawca-f569a6f2628b9ddef4dfb4424aff2dad644a8f19.tar.bz2 |
Improve the txtacc interface.
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 @@ -118,27 +118,27 @@ txtacc_grow (struct txtacc *acc, const char *buf, size_t size) buf += rest; size -= rest; } } 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)) { case 0: return NULL; case 1: txtent = acc->cur->head->data; acc->cur->head->data = NULL; - grecs_list_append (acc->mem, txtent); txtacc_entry_tailor (txtent); break; default: size = 0; for (ep = acc->cur->head; ep; ep = ep->next) @@ -153,13 +153,18 @@ txtacc_finish (struct txtacc *acc) struct txtacc_entry *tp = ep->data; txtacc_entry_append (txtent, tp->buf, tp->len); } } 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 txtacc_free_string (struct txtacc *acc, char *str) { struct grecs_list_entry *ep; |