diff options
author | Robin Watts <robin.watts@artifex.com> | 2011-09-14 17:36:57 +0100 |
---|---|---|
committer | Robin Watts <Robin.Watts@artifex.com> | 2011-09-15 14:50:17 +0100 |
commit | b51ef0eea028c73b6379e832eaa34fff3fbbb927 (patch) | |
tree | 1ab685ccd356e7fdc832b2e3322c0486b2670cfb /pdf/pdf_xobject.c | |
parent | 89ae81f651bfa112b8e07317eb6983beaf7cb212 (diff) | |
download | mupdf-b51ef0eea028c73b6379e832eaa34fff3fbbb927.tar.xz |
Add context to mupdf.
Huge pervasive change to lots of files, adding a context for exception
handling and allocation.
In time we'll move more statics into there.
Also fix some for(i = 0; i < function(...); i++) calls.
Diffstat (limited to 'pdf/pdf_xobject.c')
-rw-r--r-- | pdf/pdf_xobject.c | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/pdf/pdf_xobject.c b/pdf/pdf_xobject.c index 630ca1d9..1c1bd276 100644 --- a/pdf/pdf_xobject.c +++ b/pdf/pdf_xobject.c @@ -7,28 +7,29 @@ pdf_load_xobject(pdf_xobject **formp, pdf_xref *xref, fz_obj *dict) fz_error error; pdf_xobject *form; fz_obj *obj; + fz_context *ctx = xref->ctx; - if ((*formp = pdf_find_item(xref->store, pdf_drop_xobject, dict))) + if ((*formp = pdf_find_item(ctx, xref->store, (pdf_store_drop_fn *)pdf_drop_xobject, dict))) { pdf_keep_xobject(*formp); return fz_okay; } - form = fz_malloc(sizeof(pdf_xobject)); + form = fz_malloc(ctx, sizeof(pdf_xobject)); form->refs = 1; form->resources = NULL; form->contents = NULL; form->colorspace = NULL; /* Store item immediately, to avoid possible recursion if objects refer back to this one */ - pdf_store_item(xref->store, pdf_keep_xobject, pdf_drop_xobject, dict, form); + pdf_store_item(ctx, xref->store, (pdf_store_keep_fn *)pdf_keep_xobject, (pdf_store_drop_fn *)pdf_drop_xobject, dict, form); - obj = fz_dict_gets(dict, "BBox"); - form->bbox = pdf_to_rect(obj); + obj = fz_dict_gets(ctx, dict, "BBox"); + form->bbox = pdf_to_rect(ctx, obj); - obj = fz_dict_gets(dict, "Matrix"); + obj = fz_dict_gets(ctx, dict, "Matrix"); if (obj) - form->matrix = pdf_to_matrix(obj); + form->matrix = pdf_to_matrix(ctx, obj); else form->matrix = fz_identity; @@ -36,19 +37,19 @@ pdf_load_xobject(pdf_xobject **formp, pdf_xref *xref, fz_obj *dict) form->knockout = 0; form->transparency = 0; - obj = fz_dict_gets(dict, "Group"); + obj = fz_dict_gets(ctx, dict, "Group"); if (obj) { fz_obj *attrs = obj; - form->isolated = fz_to_bool(fz_dict_gets(attrs, "I")); - form->knockout = fz_to_bool(fz_dict_gets(attrs, "K")); + form->isolated = fz_to_bool(ctx, fz_dict_gets(ctx, attrs, "I")); + form->knockout = fz_to_bool(ctx, fz_dict_gets(ctx, attrs, "K")); - obj = fz_dict_gets(attrs, "S"); - if (fz_is_name(obj) && !strcmp(fz_to_name(obj), "Transparency")) + obj = fz_dict_gets(ctx, attrs, "S"); + if (fz_is_name(ctx, obj) && !strcmp(fz_to_name(ctx, obj), "Transparency")) form->transparency = 1; - obj = fz_dict_gets(attrs, "CS"); + obj = fz_dict_gets(ctx, attrs, "CS"); if (obj) { error = pdf_load_colorspace(&form->colorspace, xref, obj); @@ -57,15 +58,15 @@ pdf_load_xobject(pdf_xobject **formp, pdf_xref *xref, fz_obj *dict) } } - form->resources = fz_dict_gets(dict, "Resources"); + form->resources = fz_dict_gets(ctx, dict, "Resources"); if (form->resources) fz_keep_obj(form->resources); error = pdf_load_stream(&form->contents, xref, fz_to_num(dict), fz_to_gen(dict)); if (error) { - pdf_remove_item(xref->store, pdf_drop_xobject, dict); - pdf_drop_xobject(form); + pdf_remove_item(ctx, xref->store, (pdf_store_drop_fn *)pdf_drop_xobject, dict); + pdf_drop_xobject(ctx, form); return fz_error_note(error, "cannot load xobject content stream (%d %d R)", fz_to_num(dict), fz_to_gen(dict)); } @@ -81,16 +82,16 @@ pdf_keep_xobject(pdf_xobject *xobj) } void -pdf_drop_xobject(pdf_xobject *xobj) +pdf_drop_xobject(fz_context *ctx, pdf_xobject *xobj) { if (xobj && --xobj->refs == 0) { if (xobj->colorspace) - fz_drop_colorspace(xobj->colorspace); + fz_drop_colorspace(ctx, xobj->colorspace); if (xobj->resources) - fz_drop_obj(xobj->resources); + fz_drop_obj(ctx, xobj->resources); if (xobj->contents) - fz_drop_buffer(xobj->contents); - fz_free(xobj); + fz_drop_buffer(ctx, xobj->contents); + fz_free(ctx, xobj); } } |