summaryrefslogtreecommitdiff
path: root/source/fitz/buffer.c
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2016-02-24 17:06:00 +0100
committerTor Andersson <tor.andersson@artifex.com>2016-02-29 15:56:45 +0100
commit2b65dae7e2ae091c03ffe0811aa4e60457a4cd84 (patch)
tree57593ffc1d970bf67608e5137df3630ed154b31e /source/fitz/buffer.c
parent63c0874392c5159e251514db48891500e9854c5d (diff)
downloadmupdf-2b65dae7e2ae091c03ffe0811aa4e60457a4cd84.tar.xz
Pass fz_font to pdf_add_xxx_font_res instead of a fz_buffer.
Make sure all fz_fonts have a ft_buffer available.
Diffstat (limited to 'source/fitz/buffer.c')
-rw-r--r--source/fitz/buffer.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/source/fitz/buffer.c b/source/fitz/buffer.c
index 86947df0..d1609ef1 100644
--- a/source/fitz/buffer.c
+++ b/source/fitz/buffer.c
@@ -41,6 +41,22 @@ fz_new_buffer_from_data(fz_context *ctx, unsigned char *data, int size)
}
fz_buffer *
+fz_new_buffer_from_shared_data(fz_context *ctx, unsigned char *data, int size)
+{
+ fz_buffer *b;
+
+ b = fz_malloc_struct(ctx, fz_buffer);
+ b->refs = 1;
+ b->data = data;
+ b->cap = size;
+ b->len = size;
+ b->unused_bits = 0;
+ b->shared = 1;
+
+ return b;
+}
+
+fz_buffer *
fz_keep_buffer(fz_context *ctx, fz_buffer *buf)
{
if (buf)
@@ -55,7 +71,8 @@ fz_drop_buffer(fz_context *ctx, fz_buffer *buf)
return;
if (--buf->refs == 0)
{
- fz_free(ctx, buf->data);
+ if (!buf->shared)
+ fz_free(ctx, buf->data);
fz_free(ctx, buf);
}
}
@@ -63,6 +80,8 @@ fz_drop_buffer(fz_context *ctx, fz_buffer *buf)
void
fz_resize_buffer(fz_context *ctx, fz_buffer *buf, int size)
{
+ if (buf->shared)
+ fz_throw(ctx, FZ_ERROR_GENERIC, "cannot resize a buffer with shared storage");
buf->data = fz_resize_array(ctx, buf->data, size, 1);
buf->cap = size;
if (buf->len > buf->cap)