aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2009-10-20 01:09:19 +0200
committerJay Berkenbilt <ejb@ql.org>2009-10-20 01:09:19 +0200
commit3f8c4c273649c857f5a607dcbb422729fce3a166 (patch)
tree9a71fbfc838cf876f7982f7213ad994c92c0a3fc /include
parentb67a3c15e768ed88ea3cdf7525c1ddc649aec2fe (diff)
downloadqpdf-3f8c4c273649c857f5a607dcbb422729fce3a166.tar.zst
categorize all error messages and include object information if available
git-svn-id: svn+q:///qpdf/trunk@829 71b93d88-0707-0410-a8cf-f5a4172ac649
Diffstat (limited to 'include')
-rw-r--r--include/qpdf/QPDF.hh10
-rw-r--r--include/qpdf/QPDFExc.hh36
2 files changed, 41 insertions, 5 deletions
diff --git a/include/qpdf/QPDF.hh b/include/qpdf/QPDF.hh
index 9770f46d..178d71c7 100644
--- a/include/qpdf/QPDF.hh
+++ b/include/qpdf/QPDF.hh
@@ -371,9 +371,11 @@ class DLL_EXPORT QPDF
int processXRefStream(off_t offset, QPDFObjectHandle& xref_stream);
void insertXrefEntry(int obj, int f0, int f1, int f2,
bool overwrite = false);
+ void setLastObjectDescription(std::string const& description,
+ int objid, int generation);
QPDFObjectHandle readObject(
- InputSource*, int objid, int generation,
- bool in_object_stream);
+ InputSource*, std::string const& description,
+ int objid, int generation, bool in_object_stream);
QPDFObjectHandle readObjectInternal(
InputSource* input, int objid, int generation,
bool in_object_stream,
@@ -383,7 +385,8 @@ class DLL_EXPORT QPDF
QPDFTokenizer::Token readToken(InputSource*);
QPDFObjectHandle readObjectAtOffset(
- off_t offset,
+ bool attempt_recovery,
+ off_t offset, std::string const& description,
int exp_objid, int exp_generation,
int& act_objid, int& act_generation);
PointerHolder<QPDFObject> resolve(int objid, int generation);
@@ -734,6 +737,7 @@ class DLL_EXPORT QPDF
QPDFTokenizer tokenizer;
FileInputSource file;
+ std::string last_object_description;
bool encrypted;
bool encryption_initialized;
bool ignore_xref_streams;
diff --git a/include/qpdf/QPDFExc.hh b/include/qpdf/QPDFExc.hh
index d9a61bf3..6b9a11e4 100644
--- a/include/qpdf/QPDFExc.hh
+++ b/include/qpdf/QPDFExc.hh
@@ -9,15 +9,47 @@
#define __QPDFEXC_HH__
#include <qpdf/DLL.h>
+#include <qpdf/Constants.h>
#include <stdexcept>
+#include <stddef.h>
class DLL_EXPORT QPDFExc: public std::runtime_error
{
public:
- QPDFExc(std::string const& message);
- QPDFExc(std::string const& filename, int offset,
+ QPDFExc(qpdf_error_code_e error_code,
+ std::string const& filename,
+ std::string const& object,
+ off_t offset,
std::string const& message);
virtual ~QPDFExc() throw ();
+
+ // To get a complete error string, call what(), provided by
+ // std::exception. The accessors below return the original values
+ // used to create the exception. Only the error code and message
+ // are guaranteed to have non-zero/empty values.
+
+ // There is no lookup code that maps numeric error codes into
+ // strings. The numeric error code is just another way to get at
+ // the underlying issue, but it is more programmer-friendly than
+ // trying to parse a string that is subject to change.
+
+ qpdf_error_code_e getErrorCode() const;
+ std::string const& getFilename() const;
+ std::string const& getObject() const;
+ off_t getOffset() const;
+ std::string const& getMessage() const;
+
+ private:
+ static std::string createWhat(std::string const& filename,
+ std::string const& object,
+ off_t offset,
+ std::string const& message);
+
+ qpdf_error_code_e error_code;
+ std::string filename;
+ std::string object;
+ off_t offset;
+ std::string message;
};
#endif // __QPDFEXC_HH__