diff options
author | Tor Andersson <tor@ghostscript.com> | 2004-11-11 07:15:07 +0100 |
---|---|---|
committer | Tor Andersson <tor@ghostscript.com> | 2004-11-11 07:15:07 +0100 |
commit | 58de1fff510078e3d2d8cfce033c87299adf78f0 (patch) | |
tree | 80635049b0d1ccc8840717982afe983ea18c0b37 /filter/buffer.c | |
parent | 2ec725624d637789845478a90f799e9eeb54f9ee (diff) | |
download | mupdf-58de1fff510078e3d2d8cfce033c87299adf78f0.tar.xz |
filter reference counting
Diffstat (limited to 'filter/buffer.c')
-rw-r--r-- | filter/buffer.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/filter/buffer.c b/filter/buffer.c index 1b7a0793..79339456 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->nrefs = 1; b->ownsdata = 1; b->bp = fz_malloc(size); if (!b->bp) { fz_free(b); return fz_outofmem; } @@ -28,6 +29,7 @@ fz_newbufferwithdata(fz_buffer **bp, unsigned char *data, int size) b = *bp = fz_malloc(sizeof(fz_buffer)); if (!b) return fz_outofmem; + b->nrefs = 1; b->ownsdata = 0; b->bp = data; @@ -39,12 +41,22 @@ fz_newbufferwithdata(fz_buffer **bp, unsigned char *data, int size) return nil; } +fz_buffer * +fz_keepbuffer(fz_buffer *buf) +{ + buf->nrefs ++; + return buf; +} + void fz_dropbuffer(fz_buffer *buf) { - if (buf->ownsdata) - fz_free(buf->bp); - fz_free(buf); + if (--buf->nrefs == 0) + { + if (buf->ownsdata) + fz_free(buf->bp); + fz_free(buf); + } } fz_error * |