aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2018-08-14 01:48:02 +0200
committerJay Berkenbilt <ejb@ql.org>2018-08-14 02:01:51 +0200
commitb4bdc42b4fd627529e1c4a4636d1631254a2f26e (patch)
tree4a3526842ce36c08fef94ec7f60da585a505d6ce /include
parent164cbdde46d7ec6924782a60f346a6a465a79a26 (diff)
downloadqpdf-b4bdc42b4fd627529e1c4a4636d1631254a2f26e.tar.zst
New exception class QPDFSystemError (fixes #221)
Diffstat (limited to 'include')
-rw-r--r--include/qpdf/QPDFSystemError.hh58
-rw-r--r--include/qpdf/QUtil.hh9
2 files changed, 65 insertions, 2 deletions
diff --git a/include/qpdf/QPDFSystemError.hh b/include/qpdf/QPDFSystemError.hh
new file mode 100644
index 00000000..037bbe0a
--- /dev/null
+++ b/include/qpdf/QPDFSystemError.hh
@@ -0,0 +1,58 @@
+// Copyright (c) 2005-2018 Jay Berkenbilt
+//
+// This file is part of qpdf.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Versions of qpdf prior to version 7 were released under the terms
+// of version 2.0 of the Artistic License. At your option, you may
+// continue to consider qpdf to be licensed under those terms. Please
+// see the manual for additional information.
+
+#ifndef QPDFSYSTEMERROR_HH
+#define QPDFSYSTEMERROR_HH
+
+#include <qpdf/DLL.h>
+#include <qpdf/Types.h>
+
+#include <qpdf/Constants.h>
+#include <string>
+#include <stdexcept>
+
+class QPDFSystemError: public std::runtime_error
+{
+ public:
+ QPDF_DLL
+ QPDFSystemError(std::string const& description,
+ int system_errno);
+ QPDF_DLL
+ virtual ~QPDFSystemError() 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.
+
+ QPDF_DLL
+ std::string const& getDescription() const;
+ QPDF_DLL
+ int getErrno() const;
+
+ private:
+ static std::string createWhat(std::string const& description,
+ int system_errno);
+
+ std::string description;
+ int system_errno;
+};
+
+#endif // QPDFSYSTEMERROR_HH
diff --git a/include/qpdf/QUtil.hh b/include/qpdf/QUtil.hh
index 68e64370..bcedd4d3 100644
--- a/include/qpdf/QUtil.hh
+++ b/include/qpdf/QUtil.hh
@@ -61,9 +61,14 @@ namespace QUtil
QPDF_DLL
unsigned char* unsigned_char_pointer(char const* str);
- // Throw std::runtime_error with a string formed by appending to
+ // Throw QPDFSystemError, which is derived from
+ // std::runtime_error, with a string formed by appending to
// "description: " the standard string corresponding to the
- // current value of errno.
+ // current value of errno. You can retrieve the value of errno by
+ // calling getErrno() on the QPDFSystemError. Prior to qpdf 8.2.0,
+ // this method threw system::runtime_error directly, but since
+ // QPDFSystemError is derived from system::runtime_error, old code
+ // that specifically catches std::runtime_error will still work.
QPDF_DLL
void throw_system_error(std::string const& description);