diff options
author | Tor Andersson <tor@ghostscript.com> | 2004-10-05 04:50:44 +0200 |
---|---|---|
committer | Tor Andersson <tor@ghostscript.com> | 2004-10-05 04:50:44 +0200 |
commit | 00905a4e2b959ccc3b79381acbf1d3b8e5319e8e (patch) | |
tree | e880b845138781aa72473a7be579152a5d20e4eb /filter/buffer.c | |
parent | 970ce563601547adcaa131229bf296f5c3e2db3c (diff) | |
download | mupdf-00905a4e2b959ccc3b79381acbf1d3b8e5319e8e.tar.xz |
refactor file code. fix file writing.
Diffstat (limited to 'filter/buffer.c')
-rw-r--r-- | filter/buffer.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/filter/buffer.c b/filter/buffer.c index 7b728b9b..25e30a55 100644 --- a/filter/buffer.c +++ b/filter/buffer.c @@ -8,6 +8,7 @@ fz_newbuffer(fz_buffer **bp, int size) b = *bp = fz_malloc(sizeof(fz_buffer)); if (!b) return fz_outofmem; + b->ownsdata = 1; b->bp = fz_malloc(size); if (!b->bp) { fz_free(b); return fz_outofmem; } @@ -19,10 +20,31 @@ fz_newbuffer(fz_buffer **bp, int size) return nil; } +fz_error * +fz_newbufferwithdata(fz_buffer **bp, unsigned char *data, int size) +{ + fz_buffer *b; + + b = *bp = fz_malloc(sizeof(fz_buffer)); + if (!b) return fz_outofmem; + + b->ownsdata = 0; + b->bp = data; + + b->rp = b->bp; + b->wp = b->bp; + b->ep = b->bp + size; + b->eof = 0; + + return nil; +} + + void fz_freebuffer(fz_buffer *buf) { - fz_free(buf->bp); + if (buf->ownsdata) + fz_free(buf->bp); fz_free(buf); } @@ -35,6 +57,8 @@ fz_growbuffer(fz_buffer *buf) int wp = buf->wp - buf->bp; int ep = buf->ep - buf->bp; + assert(buf->ownsdata); + newbp = fz_realloc(buf->bp, ep * 2); if (!newbp) return fz_outofmem; @@ -49,6 +73,7 @@ fz_growbuffer(fz_buffer *buf) fz_error * fz_rewindbuffer(fz_buffer *buf) { + assert(buf->ownsdata); memmove(buf->bp, buf->rp, buf->wp - buf->rp); buf->wp = buf->bp + (buf->wp - buf->rp); buf->rp = buf->bp; |