summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorRobin Watts <robin.watts@artifex.com>2015-10-02 15:00:56 +0100
committerRobin Watts <robin.watts@artifex.com>2015-10-02 15:21:43 +0100
commitd203b82976bbcfc41995c2a0d05eec467112297b (patch)
treecc567ef17b88fb3de8eecc7737c55a1541f730a3 /source
parent6d57575a362af052cbc43f00fba5d853bc81767c (diff)
downloadmupdf-d203b82976bbcfc41995c2a0d05eec467112297b.tar.xz
Reference count fz_outline struct.
Diffstat (limited to 'source')
-rw-r--r--source/fitz/outline.c16
-rw-r--r--source/pdf/pdf-outline.c7
-rw-r--r--source/xps/xps-outline.c2
3 files changed, 17 insertions, 8 deletions
diff --git a/source/fitz/outline.c b/source/fitz/outline.c
index 0cd1890d..257c44c1 100644
--- a/source/fitz/outline.c
+++ b/source/fitz/outline.c
@@ -1,9 +1,23 @@
#include "mupdf/fitz.h"
+fz_outline *
+fz_new_outline(fz_context *ctx)
+{
+ fz_outline *outline = fz_malloc_struct(ctx, fz_outline);
+ outline->refs = 1;
+ return outline;
+}
+
+fz_outline *
+fz_keep_outline(fz_context *ctx, fz_outline *outline)
+{
+ return fz_keep_imp(ctx, outline, &outline->refs);
+}
+
void
fz_drop_outline(fz_context *ctx, fz_outline *outline)
{
- while (outline)
+ while (fz_drop_imp(ctx, outline, &outline->refs))
{
fz_outline *next = outline->next;
fz_drop_outline(ctx, outline->down);
diff --git a/source/pdf/pdf-outline.c b/source/pdf/pdf-outline.c
index 44c0c518..0c1d3feb 100644
--- a/source/pdf/pdf-outline.c
+++ b/source/pdf/pdf-outline.c
@@ -18,12 +18,7 @@ pdf_load_outline_imp(fz_context *ctx, pdf_document *doc, pdf_obj *dict)
{
if (pdf_mark_obj(ctx, dict))
break;
- node = fz_malloc_struct(ctx, fz_outline);
- node->title = NULL;
- node->dest.kind = FZ_LINK_NONE;
- node->down = NULL;
- node->next = NULL;
- node->is_open = 0;
+ node = fz_new_outline(ctx);
*prev = node;
prev = &node->next;
diff --git a/source/xps/xps-outline.c b/source/xps/xps-outline.c
index b6e68c29..14f8cae7 100644
--- a/source/xps/xps-outline.c
+++ b/source/xps/xps-outline.c
@@ -30,7 +30,7 @@ xps_parse_document_outline(fz_context *ctx, xps_document *doc, fz_xml *root)
if (!target || !description)
continue;
- entry = fz_malloc_struct(ctx, fz_outline);
+ entry = fz_new_outline(ctx);
entry->title = fz_strdup(ctx, description);
entry->dest.kind = FZ_LINK_GOTO;
entry->dest.ld.gotor.flags = 0;