diff options
author | Jay Berkenbilt <ejb@ql.org> | 2009-10-20 01:09:19 +0200 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2009-10-20 01:09:19 +0200 |
commit | 3f8c4c273649c857f5a607dcbb422729fce3a166 (patch) | |
tree | 9a71fbfc838cf876f7982f7213ad994c92c0a3fc /include | |
parent | b67a3c15e768ed88ea3cdf7525c1ddc649aec2fe (diff) | |
download | qpdf-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.hh | 10 | ||||
-rw-r--r-- | include/qpdf/QPDFExc.hh | 36 |
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__ |