diff options
author | Paul Gardiner <paulg.artifex@glidos.net> | 2013-05-29 12:57:41 +0100 |
---|---|---|
committer | Paul Gardiner <paulg.artifex@glidos.net> | 2013-05-29 13:03:21 +0100 |
commit | 2e7007ca39bcea9b7688f6cc5cfd6bb43eb8630c (patch) | |
tree | 6f7923bf7616e51859f4c0f89a8b08c029cd778c /pdf/pdf_stream.c | |
parent | c630e8e213f5b697b3b78989ba866fed9dd0d45f (diff) | |
download | mupdf-2e7007ca39bcea9b7688f6cc5cfd6bb43eb8630c.tar.xz |
Access the xref table via an interface
Avoid all direct access to the xref table so that the impementation can
be altered to add new features
Diffstat (limited to 'pdf/pdf_stream.c')
-rw-r--r-- | pdf/pdf_stream.c | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/pdf/pdf_stream.c b/pdf/pdf_stream.c index 0af1ddcf..50cb78ee 100644 --- a/pdf/pdf_stream.c +++ b/pdf/pdf_stream.c @@ -7,12 +7,15 @@ int pdf_is_stream(pdf_document *xref, int num, int gen) { - if (num < 0 || num >= xref->len) + pdf_xref_entry *entry; + + if (num < 0 || num >= pdf_xref_len(xref)) return 0; pdf_cache_object(xref, num, gen); - return xref->table[num].stm_ofs != 0 || xref->table[num].stm_buf; + entry = pdf_get_xref_entry(xref, num); + return entry->stm_ofs != 0 || entry->stm_buf; } /* @@ -229,8 +232,12 @@ pdf_open_raw_filter(fz_stream *chain, pdf_document *xref, pdf_obj *stmobj, int n int hascrypt; int len; - if (num > 0 && num < xref->len && xref->table[num].stm_buf) - return fz_open_buffer(ctx, xref->table[num].stm_buf); + if (num > 0 && num < pdf_xref_len(xref)) + { + pdf_xref_entry *entry = pdf_get_xref_entry(xref, num); + if (entry->stm_buf) + return fz_open_buffer(ctx, entry->stm_buf); + } /* don't close chain when we close this filter */ fz_keep_stream(chain); @@ -322,10 +329,10 @@ pdf_open_raw_renumbered_stream(pdf_document *xref, int num, int gen, int orig_nu { pdf_xref_entry *x; - if (num < 0 || num >= xref->len) + if (num < 0 || num >= pdf_xref_len(xref)) fz_throw(xref->ctx, "object id out of range (%d %d R)", num, gen); - x = xref->table + num; + x = pdf_get_xref_entry(xref, num); pdf_cache_object(xref, num, gen); @@ -340,10 +347,10 @@ pdf_open_image_stream(pdf_document *xref, int num, int gen, int orig_num, int or { pdf_xref_entry *x; - if (num < 0 || num >= xref->len) + if (num < 0 || num >= pdf_xref_len(xref)) fz_throw(xref->ctx, "object id out of range (%d %d R)", num, gen); - x = xref->table + num; + x = pdf_get_xref_entry(xref, num); pdf_cache_object(xref, num, gen); @@ -390,8 +397,12 @@ pdf_load_raw_renumbered_stream(pdf_document *xref, int num, int gen, int orig_nu int len; fz_buffer *buf; - if (num > 0 && num < xref->len && xref->table[num].stm_buf) - return fz_keep_buffer(xref->ctx, xref->table[num].stm_buf); + if (num > 0 && num < pdf_xref_len(xref)) + { + pdf_xref_entry *entry = pdf_get_xref_entry(xref, num); + if (entry->stm_buf) + return fz_keep_buffer(xref->ctx, entry->stm_buf); + } dict = pdf_load_object(xref, num, gen); @@ -434,8 +445,12 @@ pdf_load_image_stream(pdf_document *xref, int num, int gen, int orig_num, int or fz_var(buf); - if (num > 0 && num < xref->len && xref->table[num].stm_buf) - return fz_keep_buffer(xref->ctx, xref->table[num].stm_buf); + if (num > 0 && num < pdf_xref_len(xref)) + { + pdf_xref_entry *entry = pdf_get_xref_entry(xref, num); + if (entry->stm_buf) + return fz_keep_buffer(xref->ctx, entry->stm_buf); + } dict = pdf_load_object(xref, num, gen); |