From 0c29558f8caf51da6c4258fbd1ebfa341af5aab9 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Sun, 24 Dec 2017 10:06:04 +0000 Subject: clean up error handling and start decoding of indirect objects --- src/cos_object.c | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) (limited to 'src/cos_object.c') diff --git a/src/cos_object.c b/src/cos_object.c index 96c669e..f4cd4fd 100644 --- a/src/cos_object.c +++ b/src/cos_object.c @@ -7,6 +7,7 @@ #include "nspdferror.h" #include "cos_object.h" +#include "pdf_doc.h" nspdferror cos_free_object(struct cos_object *cos_obj) @@ -115,25 +116,38 @@ cos_dictionary_extract_value(struct cos_object *dict, return NSPDFERROR_NOTFOUND; } -nspdferror cos_get_int(struct cos_object *cobj, int64_t *value_out) +nspdferror +cos_get_int(struct pdf_doc *doc, + struct cos_object *cobj, + int64_t *value_out) { - if (cobj->type != COS_TYPE_INT) { - return NSPDFERROR_TYPE; + nspdferror res; + + res = xref_get_referenced(doc, &cobj); + if (res == NSPDFERROR_OK) { + if (cobj->type != COS_TYPE_INT) { + res = NSPDFERROR_TYPE; + } else { + *value_out = cobj->u.i; + } } - *value_out = cobj->u.i; - return NSPDFERROR_OK; + return res; } nspdferror -cos_get_dictionary(struct cos_object *cobj, +cos_get_dictionary(struct pdf_doc *doc, + struct cos_object *cobj, struct cos_object **value_out) { - if (cobj->type == COS_TYPE_REFERENCE) { - - } - if (cobj->type != COS_TYPE_DICTIONARY) { - return NSPDFERROR_TYPE; + nspdferror res; + + res = xref_get_referenced(doc, &cobj); + if (res == NSPDFERROR_OK) { + if (cobj->type != COS_TYPE_DICTIONARY) { + res = NSPDFERROR_TYPE; + } else { + *value_out = cobj; + } } - *value_out = cobj; - return NSPDFERROR_OK; + return res; } -- cgit v1.2.3