From 3f8c4c273649c857f5a607dcbb422729fce3a166 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Mon, 19 Oct 2009 23:09:19 +0000 Subject: categorize all error messages and include object information if available git-svn-id: svn+q:///qpdf/trunk@829 71b93d88-0707-0410-a8cf-f5a4172ac649 --- include/qpdf/QPDF.hh | 10 +++++++--- include/qpdf/QPDFExc.hh | 36 ++++++++++++++++++++++++++++++++++-- 2 files changed, 41 insertions(+), 5 deletions(-) (limited to 'include') 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 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 +#include #include +#include 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__ -- cgit v1.2.3-54-g00ecf