Commit 0ad4e190ffbb85ea2db5a05d43cd4f81d98cfe63

Authored by Jay Berkenbilt
1 parent 7049588b

Make QPDFLogger() private and provide create method

include/qpdf/QPDFLogger.hh
... ... @@ -31,7 +31,7 @@ class QPDFLogger
31 31 {
32 32 public:
33 33 QPDF_DLL
34   - QPDFLogger();
  34 + static std::shared_ptr<QPDFLogger> create();
35 35  
36 36 // Return the default logger. In general, you should use the
37 37 // default logger. You can also create your own loggers and use
... ... @@ -152,6 +152,7 @@ class QPDFLogger
152 152 void setOutputStreams(std::ostream* out_stream, std::ostream* err_stream);
153 153  
154 154 private:
  155 + QPDFLogger();
155 156 std::shared_ptr<Pipeline>
156 157 throwIfNull(std::shared_ptr<Pipeline>, bool null_okay);
157 158  
... ...
libqpdf/QPDF.cc
... ... @@ -362,7 +362,7 @@ QPDF::setLogger(std::shared_ptr&lt;QPDFLogger&gt; l)
362 362 void
363 363 QPDF::setOutputStreams(std::ostream* out, std::ostream* err)
364 364 {
365   - setLogger(std::make_shared<QPDFLogger>());
  365 + setLogger(QPDFLogger::create());
366 366 this->m->log->setOutputStreams(out, err);
367 367 }
368 368  
... ...
libqpdf/QPDFJob.cc
... ... @@ -460,7 +460,7 @@ QPDFJob::setLogger(std::shared_ptr&lt;QPDFLogger&gt; l)
460 460 void
461 461 QPDFJob::setOutputStreams(std::ostream* out, std::ostream* err)
462 462 {
463   - setLogger(std::make_shared<QPDFLogger>());
  463 + setLogger(QPDFLogger::create());
464 464 this->m->log->setOutputStreams(out, err);
465 465 }
466 466  
... ...
libqpdf/QPDFLogger.cc
... ... @@ -65,9 +65,15 @@ QPDFLogger::QPDFLogger() :
65 65 }
66 66  
67 67 std::shared_ptr<QPDFLogger>
  68 +QPDFLogger::create()
  69 +{
  70 + return std::shared_ptr<QPDFLogger>(new QPDFLogger);
  71 +}
  72 +
  73 +std::shared_ptr<QPDFLogger>
68 74 QPDFLogger::defaultLogger()
69 75 {
70   - static auto l = std::make_shared<QPDFLogger>();
  76 + static auto l = create();
71 77 return l;
72 78 }
73 79  
... ...
libtests/logger.cc
... ... @@ -39,64 +39,64 @@ test2()
39 39 {
40 40 // First call saveToStandardOutput. Then use info, which then to
41 41 // go stderr.
42   - QPDFLogger l;
43   - l.saveToStandardOutput(true);
44   - l.info(std::string("info to stderr\n"));
45   - *(l.getSave()) << "save to stdout\n";
46   - l.setInfo(nullptr);
47   - l.info("info still to stderr\n");
48   - l.setSave(nullptr, false);
49   - l.setInfo(nullptr);
50   - l.info("info back to stdout\n");
  42 + auto l = QPDFLogger::create();
  43 + l->saveToStandardOutput(true);
  44 + l->info(std::string("info to stderr\n"));
  45 + *(l->getSave()) << "save to stdout\n";
  46 + l->setInfo(nullptr);
  47 + l->info("info still to stderr\n");
  48 + l->setSave(nullptr, false);
  49 + l->setInfo(nullptr);
  50 + l->info("info back to stdout\n");
51 51 }
52 52  
53 53 static void
54 54 test3()
55 55 {
56 56 // Error/warning
57   - QPDFLogger l;
  57 + auto l = QPDFLogger::create();
58 58  
59 59 // Warning follows error when error is set explicitly.
60 60 std::string errors;
61 61 auto pl_error = std::make_shared<Pl_String>("errors", nullptr, errors);
62   - l.setError(pl_error);
63   - l.warn("warn follows error\n");
  62 + l->setError(pl_error);
  63 + l->warn("warn follows error\n");
64 64 assert(errors == "warn follows error\n");
65   - l.error("error too\n");
  65 + l->error("error too\n");
66 66 assert(errors == "warn follows error\nerror too\n");
67 67  
68 68 // Set warnings -- now they're separate
69 69 std::string warnings;
70 70 auto pl_warn = std::make_shared<Pl_String>("warnings", nullptr, warnings);
71   - l.setWarn(pl_warn);
72   - l.warn(std::string("warning now separate\n"));
73   - l.error(std::string("new error\n"));
  71 + l->setWarn(pl_warn);
  72 + l->warn(std::string("warning now separate\n"));
  73 + l->error(std::string("new error\n"));
74 74 assert(warnings == "warning now separate\n");
75 75 assert(errors == "warn follows error\nerror too\nnew error\n");
76 76 std::string errors2;
77 77 pl_error = std::make_shared<Pl_String>("errors", nullptr, errors2);
78   - l.setError(pl_error);
79   - l.warn("new warning\n");
80   - l.error("another new error\n");
  78 + l->setError(pl_error);
  79 + l->warn("new warning\n");
  80 + l->error("another new error\n");
81 81 assert(warnings == "warning now separate\nnew warning\n");
82 82 assert(errors == "warn follows error\nerror too\nnew error\n");
83 83 assert(errors2 == "another new error\n");
84 84  
85 85 // Restore warnings to default -- follows error again
86   - l.setWarn(nullptr);
87   - l.warn("warning 3\n");
88   - l.error("error 3\n");
  86 + l->setWarn(nullptr);
  87 + l->warn("warning 3\n");
  88 + l->error("error 3\n");
89 89 assert(warnings == "warning now separate\nnew warning\n");
90 90 assert(errors == "warn follows error\nerror too\nnew error\n");
91 91 assert(errors2 == "another new error\nwarning 3\nerror 3\n");
92 92  
93 93 // Restore everything to default
94   - l.setInfo(nullptr);
95   - l.setWarn(nullptr);
96   - l.setError(nullptr);
97   - l.info("after reset, info to stdout\n");
98   - l.warn("after reset, warn to stderr\n");
99   - l.error("after reset, error to stderr\n");
  94 + l->setInfo(nullptr);
  95 + l->setWarn(nullptr);
  96 + l->setError(nullptr);
  97 + l->info("after reset, info to stdout\n");
  98 + l->warn("after reset, warn to stderr\n");
  99 + l->error("after reset, error to stderr\n");
100 100 }
101 101  
102 102 int
... ...