diff options
author | ajs <ajs> | 2005-01-28 20:41:07 +0000 |
---|---|---|
committer | ajs <ajs> | 2005-01-28 20:41:07 +0000 |
commit | afb8b6055c5e54be762e220cf9b7b65a22266733 (patch) | |
tree | 8434d1316d56805368e2ce2dc13a095fdb3a8c91 /lib/buffer.c | |
parent | f6834d4c4031276361465dd19ef1918e239566c8 (diff) |
2005-01-28 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* 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.
Diffstat (limited to 'lib/buffer.c')
-rw-r--r-- | lib/buffer.c | 18 |
1 files changed, 17 insertions, 1 deletions
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. */ |