aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-09-09 13:03:29 +0200
committerJay Berkenbilt <ejb@ql.org>2022-09-09 13:03:29 +0200
commit0ad4e190ffbb85ea2db5a05d43cd4f81d98cfe63 (patch)
treec764219e926bc01ddd72f3bc7dca41aaf6a46b7f
parent7049588bff21e3ea3e7bf3c4a4325c8ab4ed46f8 (diff)
downloadqpdf-0ad4e190ffbb85ea2db5a05d43cd4f81d98cfe63.tar.zst
Make QPDFLogger() private and provide create method
-rw-r--r--include/qpdf/QPDFLogger.hh3
-rw-r--r--libqpdf/QPDF.cc2
-rw-r--r--libqpdf/QPDFJob.cc2
-rw-r--r--libqpdf/QPDFLogger.cc8
-rw-r--r--libtests/logger.cc56
5 files changed, 39 insertions, 32 deletions
diff --git a/include/qpdf/QPDFLogger.hh b/include/qpdf/QPDFLogger.hh
index 655da668..54d91d60 100644
--- a/include/qpdf/QPDFLogger.hh
+++ b/include/qpdf/QPDFLogger.hh
@@ -31,7 +31,7 @@ class QPDFLogger
{
public:
QPDF_DLL
- QPDFLogger();
+ static std::shared_ptr<QPDFLogger> create();
// Return the default logger. In general, you should use the
// default logger. You can also create your own loggers and use
@@ -152,6 +152,7 @@ class QPDFLogger
void setOutputStreams(std::ostream* out_stream, std::ostream* err_stream);
private:
+ QPDFLogger();
std::shared_ptr<Pipeline>
throwIfNull(std::shared_ptr<Pipeline>, bool null_okay);
diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc
index 454c05ee..8c5e8e13 100644
--- a/libqpdf/QPDF.cc
+++ b/libqpdf/QPDF.cc
@@ -362,7 +362,7 @@ QPDF::setLogger(std::shared_ptr<QPDFLogger> l)
void
QPDF::setOutputStreams(std::ostream* out, std::ostream* err)
{
- setLogger(std::make_shared<QPDFLogger>());
+ setLogger(QPDFLogger::create());
this->m->log->setOutputStreams(out, err);
}
diff --git a/libqpdf/QPDFJob.cc b/libqpdf/QPDFJob.cc
index df93b859..384af854 100644
--- a/libqpdf/QPDFJob.cc
+++ b/libqpdf/QPDFJob.cc
@@ -460,7 +460,7 @@ QPDFJob::setLogger(std::shared_ptr<QPDFLogger> l)
void
QPDFJob::setOutputStreams(std::ostream* out, std::ostream* err)
{
- setLogger(std::make_shared<QPDFLogger>());
+ setLogger(QPDFLogger::create());
this->m->log->setOutputStreams(out, err);
}
diff --git a/libqpdf/QPDFLogger.cc b/libqpdf/QPDFLogger.cc
index 78cb2a32..7fe21c97 100644
--- a/libqpdf/QPDFLogger.cc
+++ b/libqpdf/QPDFLogger.cc
@@ -65,9 +65,15 @@ QPDFLogger::QPDFLogger() :
}
std::shared_ptr<QPDFLogger>
+QPDFLogger::create()
+{
+ return std::shared_ptr<QPDFLogger>(new QPDFLogger);
+}
+
+std::shared_ptr<QPDFLogger>
QPDFLogger::defaultLogger()
{
- static auto l = std::make_shared<QPDFLogger>();
+ static auto l = create();
return l;
}
diff --git a/libtests/logger.cc b/libtests/logger.cc
index b968422e..987e15d3 100644
--- a/libtests/logger.cc
+++ b/libtests/logger.cc
@@ -39,64 +39,64 @@ test2()
{
// First call saveToStandardOutput. Then use info, which then to
// go stderr.
- QPDFLogger l;
- l.saveToStandardOutput(true);
- l.info(std::string("info to stderr\n"));
- *(l.getSave()) << "save to stdout\n";
- l.setInfo(nullptr);
- l.info("info still to stderr\n");
- l.setSave(nullptr, false);
- l.setInfo(nullptr);
- l.info("info back to stdout\n");
+ auto l = QPDFLogger::create();
+ l->saveToStandardOutput(true);
+ l->info(std::string("info to stderr\n"));
+ *(l->getSave()) << "save to stdout\n";
+ l->setInfo(nullptr);
+ l->info("info still to stderr\n");
+ l->setSave(nullptr, false);
+ l->setInfo(nullptr);
+ l->info("info back to stdout\n");
}
static void
test3()
{
// Error/warning
- QPDFLogger l;
+ auto l = QPDFLogger::create();
// Warning follows error when error is set explicitly.
std::string errors;
auto pl_error = std::make_shared<Pl_String>("errors", nullptr, errors);
- l.setError(pl_error);
- l.warn("warn follows error\n");
+ l->setError(pl_error);
+ l->warn("warn follows error\n");
assert(errors == "warn follows error\n");
- l.error("error too\n");
+ l->error("error too\n");
assert(errors == "warn follows error\nerror too\n");
// Set warnings -- now they're separate
std::string warnings;
auto pl_warn = std::make_shared<Pl_String>("warnings", nullptr, warnings);
- l.setWarn(pl_warn);
- l.warn(std::string("warning now separate\n"));
- l.error(std::string("new error\n"));
+ l->setWarn(pl_warn);
+ l->warn(std::string("warning now separate\n"));
+ l->error(std::string("new error\n"));
assert(warnings == "warning now separate\n");
assert(errors == "warn follows error\nerror too\nnew error\n");
std::string errors2;
pl_error = std::make_shared<Pl_String>("errors", nullptr, errors2);
- l.setError(pl_error);
- l.warn("new warning\n");
- l.error("another new error\n");
+ l->setError(pl_error);
+ l->warn("new warning\n");
+ l->error("another new error\n");
assert(warnings == "warning now separate\nnew warning\n");
assert(errors == "warn follows error\nerror too\nnew error\n");
assert(errors2 == "another new error\n");
// Restore warnings to default -- follows error again
- l.setWarn(nullptr);
- l.warn("warning 3\n");
- l.error("error 3\n");
+ l->setWarn(nullptr);
+ l->warn("warning 3\n");
+ l->error("error 3\n");
assert(warnings == "warning now separate\nnew warning\n");
assert(errors == "warn follows error\nerror too\nnew error\n");
assert(errors2 == "another new error\nwarning 3\nerror 3\n");
// Restore everything to default
- l.setInfo(nullptr);
- l.setWarn(nullptr);
- l.setError(nullptr);
- l.info("after reset, info to stdout\n");
- l.warn("after reset, warn to stderr\n");
- l.error("after reset, error to stderr\n");
+ l->setInfo(nullptr);
+ l->setWarn(nullptr);
+ l->setError(nullptr);
+ l->info("after reset, info to stdout\n");
+ l->warn("after reset, warn to stderr\n");
+ l->error("after reset, error to stderr\n");
}
int