diff options
Diffstat (limited to 'pdf/pdf_cmap_load.c')
-rw-r--r-- | pdf/pdf_cmap_load.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/pdf/pdf_cmap_load.c b/pdf/pdf_cmap_load.c index 5bcf578f..51949907 100644 --- a/pdf/pdf_cmap_load.c +++ b/pdf/pdf_cmap_load.c @@ -1,6 +1,17 @@ #include "fitz.h" #include "mupdf.h" +unsigned int +pdf_cmap_size(pdf_cmap *cmap) +{ + if (cmap == NULL) + return 0; + if (cmap->storable.refs < 0) + return 0; + + return cmap->rcap * sizeof(pdf_range) + cmap->tcap * sizeof(short) + pdf_cmap_size(cmap->usecmap); +} + /* * Load CMap stream in PDF file */ @@ -13,11 +24,12 @@ pdf_load_embedded_cmap(pdf_xref *xref, fz_obj *stmobj) fz_obj *wmode; fz_obj *obj; fz_context *ctx = xref->ctx; - volatile int phase = 0; + int phase = 0; + + fz_var(phase); - if ((cmap = pdf_find_item(ctx, xref->store, (pdf_store_drop_fn *)pdf_drop_cmap, stmobj))) + if ((cmap = fz_find_item(ctx, pdf_free_cmap_imp, stmobj))) { - pdf_keep_cmap(cmap); return cmap; } @@ -49,7 +61,7 @@ pdf_load_embedded_cmap(pdf_xref *xref, fz_obj *stmobj) pdf_drop_cmap(ctx, usecmap); } - pdf_store_item(ctx, xref->store, (pdf_store_keep_fn *)pdf_keep_cmap, (pdf_store_drop_fn *)pdf_drop_cmap, stmobj, cmap); + fz_store_item(ctx, stmobj, cmap, pdf_cmap_size(cmap)); } fz_catch(ctx) { |