From d203b82976bbcfc41995c2a0d05eec467112297b Mon Sep 17 00:00:00 2001 From: Robin Watts Date: Fri, 2 Oct 2015 15:00:56 +0100 Subject: Reference count fz_outline struct. --- source/fitz/outline.c | 16 +++++++++++++++- source/pdf/pdf-outline.c | 7 +------ source/xps/xps-outline.c | 2 +- 3 files changed, 17 insertions(+), 8 deletions(-) (limited to 'source') 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; -- cgit v1.2.3