summaryrefslogtreecommitdiff
path: root/fitz/stm_buffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'fitz/stm_buffer.c')
-rw-r--r--fitz/stm_buffer.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/fitz/stm_buffer.c b/fitz/stm_buffer.c
index 7f9d521d..4be0165a 100644
--- a/fitz/stm_buffer.c
+++ b/fitz/stm_buffer.c
@@ -1,4 +1,4 @@
-#include "fitz.h"
+#include "fitz-internal.h"
fz_buffer *
fz_new_buffer(fz_context *ctx, int size)
@@ -28,7 +28,12 @@ fz_buffer *
fz_keep_buffer(fz_context *ctx, fz_buffer *buf)
{
if (buf)
+ {
+ if (buf->refs == 1 && buf->cap > buf->len+1)
+ fz_resize_buffer(ctx, buf, buf->len);
buf->refs ++;
+ }
+
return buf;
}
@@ -58,3 +63,18 @@ fz_grow_buffer(fz_context *ctx, fz_buffer *buf)
{
fz_resize_buffer(ctx, buf, (buf->cap * 3) / 2);
}
+
+void
+fz_trim_buffer(fz_context *ctx, fz_buffer *buf)
+{
+ if (buf->cap > buf->len+1)
+ fz_resize_buffer(ctx, buf, buf->len);
+}
+
+int
+fz_buffer_storage(fz_context *ctx, fz_buffer *buf, unsigned char **datap)
+{
+ if (datap)
+ *datap = (buf ? buf->data : NULL);
+ return (buf ? buf->len : 0);
+}