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,7 +31,7 @@ class QPDFLogger
31 { 31 {
32 public: 32 public:
33 QPDF_DLL 33 QPDF_DLL
34 - QPDFLogger(); 34 + static std::shared_ptr<QPDFLogger> create();
35 35
36 // Return the default logger. In general, you should use the 36 // Return the default logger. In general, you should use the
37 // default logger. You can also create your own loggers and use 37 // default logger. You can also create your own loggers and use
@@ -152,6 +152,7 @@ class QPDFLogger @@ -152,6 +152,7 @@ class QPDFLogger
152 void setOutputStreams(std::ostream* out_stream, std::ostream* err_stream); 152 void setOutputStreams(std::ostream* out_stream, std::ostream* err_stream);
153 153
154 private: 154 private:
  155 + QPDFLogger();
155 std::shared_ptr<Pipeline> 156 std::shared_ptr<Pipeline>
156 throwIfNull(std::shared_ptr<Pipeline>, bool null_okay); 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,7 +362,7 @@ QPDF::setLogger(std::shared_ptr&lt;QPDFLogger&gt; l)
362 void 362 void
363 QPDF::setOutputStreams(std::ostream* out, std::ostream* err) 363 QPDF::setOutputStreams(std::ostream* out, std::ostream* err)
364 { 364 {
365 - setLogger(std::make_shared<QPDFLogger>()); 365 + setLogger(QPDFLogger::create());
366 this->m->log->setOutputStreams(out, err); 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,7 +460,7 @@ QPDFJob::setLogger(std::shared_ptr&lt;QPDFLogger&gt; l)
460 void 460 void
461 QPDFJob::setOutputStreams(std::ostream* out, std::ostream* err) 461 QPDFJob::setOutputStreams(std::ostream* out, std::ostream* err)
462 { 462 {
463 - setLogger(std::make_shared<QPDFLogger>()); 463 + setLogger(QPDFLogger::create());
464 this->m->log->setOutputStreams(out, err); 464 this->m->log->setOutputStreams(out, err);
465 } 465 }
466 466
libqpdf/QPDFLogger.cc
@@ -65,9 +65,15 @@ QPDFLogger::QPDFLogger() : @@ -65,9 +65,15 @@ QPDFLogger::QPDFLogger() :
65 } 65 }
66 66
67 std::shared_ptr<QPDFLogger> 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 QPDFLogger::defaultLogger() 74 QPDFLogger::defaultLogger()
69 { 75 {
70 - static auto l = std::make_shared<QPDFLogger>(); 76 + static auto l = create();
71 return l; 77 return l;
72 } 78 }
73 79
libtests/logger.cc
@@ -39,64 +39,64 @@ test2() @@ -39,64 +39,64 @@ test2()
39 { 39 {
40 // First call saveToStandardOutput. Then use info, which then to 40 // First call saveToStandardOutput. Then use info, which then to
41 // go stderr. 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 static void 53 static void
54 test3() 54 test3()
55 { 55 {
56 // Error/warning 56 // Error/warning
57 - QPDFLogger l; 57 + auto l = QPDFLogger::create();
58 58
59 // Warning follows error when error is set explicitly. 59 // Warning follows error when error is set explicitly.
60 std::string errors; 60 std::string errors;
61 auto pl_error = std::make_shared<Pl_String>("errors", nullptr, errors); 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 assert(errors == "warn follows error\n"); 64 assert(errors == "warn follows error\n");
65 - l.error("error too\n"); 65 + l->error("error too\n");
66 assert(errors == "warn follows error\nerror too\n"); 66 assert(errors == "warn follows error\nerror too\n");
67 67
68 // Set warnings -- now they're separate 68 // Set warnings -- now they're separate
69 std::string warnings; 69 std::string warnings;
70 auto pl_warn = std::make_shared<Pl_String>("warnings", nullptr, warnings); 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 assert(warnings == "warning now separate\n"); 74 assert(warnings == "warning now separate\n");
75 assert(errors == "warn follows error\nerror too\nnew error\n"); 75 assert(errors == "warn follows error\nerror too\nnew error\n");
76 std::string errors2; 76 std::string errors2;
77 pl_error = std::make_shared<Pl_String>("errors", nullptr, errors2); 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 assert(warnings == "warning now separate\nnew warning\n"); 81 assert(warnings == "warning now separate\nnew warning\n");
82 assert(errors == "warn follows error\nerror too\nnew error\n"); 82 assert(errors == "warn follows error\nerror too\nnew error\n");
83 assert(errors2 == "another new error\n"); 83 assert(errors2 == "another new error\n");
84 84
85 // Restore warnings to default -- follows error again 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 assert(warnings == "warning now separate\nnew warning\n"); 89 assert(warnings == "warning now separate\nnew warning\n");
90 assert(errors == "warn follows error\nerror too\nnew error\n"); 90 assert(errors == "warn follows error\nerror too\nnew error\n");
91 assert(errors2 == "another new error\nwarning 3\nerror 3\n"); 91 assert(errors2 == "another new error\nwarning 3\nerror 3\n");
92 92
93 // Restore everything to default 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 int 102 int