static pdf_obj * resolve_dest_rec(fz_context *ctx, pdf_document *doc, pdf_obj *dest, int depth) { if (depth > 10) /* Arbitrary to avoid infinite recursion */ return NULL; if (pdf_is_name(ctx, dest) || pdf_is_string(ctx, dest)) { dest = pdf_lookup_dest(ctx, doc, dest); dest = resolve_dest_rec(ctx, doc, dest, depth+1); return dest; } else if (pdf_is_array(ctx, dest)) { return dest; } else if (pdf_is_dict(ctx, dest)) { dest = pdf_dict_get(ctx, dest, PDF_NAME_D); return resolve_dest_rec(ctx, doc, dest, depth+1); } else if (pdf_is_indirect(ctx, dest)) return dest; return NULL; }
static pdf_obj * resolve_dest_rec(pdf_document *xref, pdf_obj *dest, int depth) { if (depth > 10) /* Arbitrary to avoid infinite recursion */ return NULL; if (pdf_is_name(dest) || pdf_is_string(dest)) { dest = pdf_lookup_dest(xref, dest); return resolve_dest_rec(xref, dest, depth+1); } else if (pdf_is_array(dest)) { return dest; } else if (pdf_is_dict(dest)) { dest = pdf_dict_gets(dest, "D"); return resolve_dest_rec(xref, dest, depth+1); } else if (pdf_is_indirect(dest)) return dest; return NULL; }
static pdf_obj * resolve_dest(pdf_document *xref, pdf_obj *dest) { return resolve_dest_rec(xref, dest, 0); }
static pdf_obj * resolve_dest(fz_context *ctx, pdf_document *doc, pdf_obj *dest) { return resolve_dest_rec(ctx, doc, dest, 0); }