aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-01-28 13:46:04 +0100
committerJay Berkenbilt <ejb@ql.org>2022-01-30 19:11:03 +0100
commit0364024781ffa709a1a86ae9c6638f71df0317ca (patch)
tree7fde4d205b81d4fb65a07736d95fb1a09d746022 /include
parent764feb0f8e0b7753c2d3efe644561220acbc771c (diff)
downloadqpdf-0364024781ffa709a1a86ae9c6638f71df0317ca.tar.zst
Use QPDFUsage exception for cli, json, and QPDFJob errors
Diffstat (limited to 'include')
-rw-r--r--include/qpdf/JSONHandler.hh22
-rw-r--r--include/qpdf/QPDFArgParser.hh14
-rw-r--r--include/qpdf/QPDFExc.hh2
-rw-r--r--include/qpdf/QPDFJob.hh16
-rw-r--r--include/qpdf/QPDFSystemError.hh2
-rw-r--r--include/qpdf/QPDFUsage.hh39
6 files changed, 57 insertions, 38 deletions
diff --git a/include/qpdf/JSONHandler.hh b/include/qpdf/JSONHandler.hh
index 0f75f946..73e8295f 100644
--- a/include/qpdf/JSONHandler.hh
+++ b/include/qpdf/JSONHandler.hh
@@ -28,7 +28,6 @@
#include <string>
#include <map>
#include <functional>
-#include <stdexcept>
#include <memory>
// This class allows a sax-like walk through a JSON object with
@@ -39,15 +38,8 @@
class JSONHandler
{
public:
- // Error exception is thrown if there are any errors validating
- // the JSON object.
- class QPDF_DLL_CLASS Error: public std::runtime_error
- {
- public:
- QPDF_DLL
- Error(std::string const&);
- };
-
+ // A QPDFUsage exception is thrown if there are any errors
+ // validating the JSON object.
QPDF_DLL
JSONHandler();
@@ -55,10 +47,10 @@ class JSONHandler
~JSONHandler() = default;
// Based on the type of handler, expect the object to be of a
- // certain type. JSONHandler::Error is thrown otherwise. Multiple
- // handlers may be registered, which allows the object to be of
- // various types. If an anyHandler is added, no other handler will
- // be called. There is no "final" handler -- if the top-level is a
+ // certain type. QPDFUsage is thrown otherwise. Multiple handlers
+ // may be registered, which allows the object to be of various
+ // types. If an anyHandler is added, no other handler will be
+ // called. There is no "final" handler -- if the top-level is a
// dictionary or array, just use its end handler.
typedef std::function<void(
@@ -106,6 +98,8 @@ class JSONHandler
private:
JSONHandler(JSONHandler const&) = delete;
+ static void usage(std::string const& msg);
+
struct Handlers
{
Handlers() :
diff --git a/include/qpdf/QPDFArgParser.hh b/include/qpdf/QPDFArgParser.hh
index 931170d8..8075781e 100644
--- a/include/qpdf/QPDFArgParser.hh
+++ b/include/qpdf/QPDFArgParser.hh
@@ -29,7 +29,6 @@
#include <map>
#include <vector>
#include <functional>
-#include <stdexcept>
#include <sstream>
// This is not a general-purpose argument parser. It is tightly
@@ -56,15 +55,6 @@
class QPDFArgParser
{
public:
- // Usage exception is thrown if there are any errors parsing
- // arguments
- class QPDF_DLL_CLASS Usage: public std::runtime_error
- {
- public:
- QPDF_DLL
- Usage(std::string const&);
- };
-
// progname_env is used to override argv[0] when figuring out the
// name of the executable for setting up completion. This may be
// needed if the program is invoked by a wrapper.
@@ -72,8 +62,8 @@ class QPDFArgParser
QPDFArgParser(int argc, char* argv[], char const* progname_env);
// Calls exit(0) if a help option is given or if in completion
- // mode. If there are argument parsing errors,
- // QPDFArgParser::Usage is thrown.
+ // mode. If there are argument parsing errors, QPDFUsage is
+ // thrown.
QPDF_DLL
void parseArgs();
diff --git a/include/qpdf/QPDFExc.hh b/include/qpdf/QPDFExc.hh
index a156412b..faf5ddf6 100644
--- a/include/qpdf/QPDFExc.hh
+++ b/include/qpdf/QPDFExc.hh
@@ -39,7 +39,7 @@ class QPDF_DLL_CLASS QPDFExc: public std::runtime_error
qpdf_offset_t offset,
std::string const& message);
QPDF_DLL
- virtual ~QPDFExc() throw ()
+ virtual ~QPDFExc() noexcept
{
}
diff --git a/include/qpdf/QPDFJob.hh b/include/qpdf/QPDFJob.hh
index 076501ff..e56626a7 100644
--- a/include/qpdf/QPDFJob.hh
+++ b/include/qpdf/QPDFJob.hh
@@ -43,15 +43,8 @@ class QPDFWriter;
class QPDFJob
{
public:
- // ConfigError exception is thrown if there are any usage-like
- // errors when calling Config methods.
- class QPDF_DLL_CLASS ConfigError: public std::runtime_error
- {
- public:
- QPDF_DLL
- ConfigError(std::string const&);
- };
-
+ // QPDFUsage is thrown if there are any usage-like errors when
+ // calling Config methods.
QPDF_DLL
QPDFJob();
@@ -318,7 +311,9 @@ class QPDFJob
friend class Config;
// Return a top-level configuration item. See CONFIGURATION above
- // for details.
+ // for details. If an invalid configuration is created (such as
+ // supplying contradictory options, omitting an input file, etc.),
+ // QPDFUsage is thrown.
QPDF_DLL
std::shared_ptr<Config> config();
@@ -404,6 +399,7 @@ class QPDFJob
};
// Helper functions
+ static void usage(std::string const& msg);
static JSON json_schema(std::set<std::string>* keys = 0);
static void parse_object_id(
std::string const& objspec, bool& trailer, int& obj, int& gen);
diff --git a/include/qpdf/QPDFSystemError.hh b/include/qpdf/QPDFSystemError.hh
index 5d631b8b..16eb3583 100644
--- a/include/qpdf/QPDFSystemError.hh
+++ b/include/qpdf/QPDFSystemError.hh
@@ -36,7 +36,7 @@ class QPDF_DLL_CLASS QPDFSystemError: public std::runtime_error
QPDFSystemError(std::string const& description,
int system_errno);
QPDF_DLL
- virtual ~QPDFSystemError() throw ();
+ virtual ~QPDFSystemError() noexcept;
// To get a complete error string, call what(), provided by
// std::exception. The accessors below return the original values
diff --git a/include/qpdf/QPDFUsage.hh b/include/qpdf/QPDFUsage.hh
new file mode 100644
index 00000000..124bf188
--- /dev/null
+++ b/include/qpdf/QPDFUsage.hh
@@ -0,0 +1,39 @@
+// Copyright (c) 2005-2021 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 QPDFUSAGE_HH
+#define QPDFUSAGE_HH
+
+#include <qpdf/DLL.h>
+
+#include <string>
+#include <stdexcept>
+
+class QPDF_DLL_CLASS QPDFUsage: public std::runtime_error
+{
+ public:
+ QPDF_DLL
+ QPDFUsage(std::string const& msg);
+ QPDF_DLL
+ virtual ~QPDFUsage() noexcept = default;
+};
+
+#endif // QPDFUSAGE_HH