From afb8b6055c5e54be762e220cf9b7b65a22266733 Mon Sep 17 00:00:00 2001 From: ajs Date: Fri, 28 Jan 2005 20:41:07 +0000 Subject: 2005-01-28 Andrew J. Schorr * lib/buffer.h: Document behavior of buffer_getstr function. * lib/buffer.c: (buffer_getstr) Fix bug: must handle case where the string extends beyond the head struct buffer_data. --- lib/buffer.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'lib/buffer.c') diff --git a/lib/buffer.c b/lib/buffer.c index 296fd144..60048bc0 100644 --- a/lib/buffer.c +++ b/lib/buffer.c @@ -88,7 +88,23 @@ buffer_free (struct buffer *b) char * buffer_getstr (struct buffer *b) { - return strdup ((char *)b->head->data); + size_t totlen = 0; + struct buffer_data *data; + char *s; + char *p; + + for (data = b->head; data; data = data->next) + totlen += data->cp - data->sp; + if (!(s = malloc(totlen+1))) + return NULL; + p = s; + for (data = b->head; data; data = data->next) + { + memcpy(p, data->data + data->sp, data->cp - data->sp); + p += data->cp - data->sp; + } + *p = '\0'; + return s; } /* Return 1 if buffer is empty. */ -- cgit v1.2.1