Commit a68703b07e928be0eeb909c0e777e13e88cbf86d

Authored by Jay Berkenbilt
1 parent ae819b53

Replace PointerHolder with std::shared_ptr in library sources only

(patrepl and cleanpatch are my own utilities)

patrepl s/PointerHolder/std::shared_ptr/g {include,libqpdf}/qpdf/*.hh
patrepl s/PointerHolder/std::shared_ptr/g libqpdf/*.cc
patrepl s/make_pointer_holder/std::make_shared/g libqpdf/*.cc
patrepl s/make_array_pointer_holder/QUtil::make_shared_array/g libqpdf/*.cc
patrepl s,qpdf/std::shared_ptr,qpdf/PointerHolder, **/*.cc **/*.hh
git restore include/qpdf/PointerHolder.hh
cleanpatch
./format-code
Showing 68 changed files with 283 additions and 278 deletions
include/qpdf/Buffer.hh
... ... @@ -75,7 +75,7 @@ class Buffer
75 75  
76 76 void copy(Buffer const&);
77 77  
78   - PointerHolder<Members> m;
  78 + std::shared_ptr<Members> m;
79 79 };
80 80  
81 81 #endif // BUFFER_HH
... ...
include/qpdf/BufferInputSource.hh
... ... @@ -73,7 +73,7 @@ class BufferInputSource: public InputSource
73 73 qpdf_offset_t max_offset;
74 74 };
75 75  
76   - PointerHolder<Members> m;
  76 + std::shared_ptr<Members> m;
77 77 };
78 78  
79 79 #endif // QPDF_BUFFERINPUTSOURCE_HH
... ...
include/qpdf/ClosedFileInputSource.hh
... ... @@ -84,10 +84,10 @@ class ClosedFileInputSource: public InputSource
84 84  
85 85 std::string filename;
86 86 qpdf_offset_t offset;
87   - PointerHolder<FileInputSource> fis;
  87 + std::shared_ptr<FileInputSource> fis;
88 88 bool stay_open;
89 89 };
90   - PointerHolder<Members> m;
  90 + std::shared_ptr<Members> m;
91 91 };
92 92  
93 93 #endif // QPDF_CLOSEDFILEINPUTSOURCE_HH
... ...
include/qpdf/FileInputSource.hh
... ... @@ -71,7 +71,7 @@ class FileInputSource: public InputSource
71 71 FILE* file;
72 72 };
73 73  
74   - PointerHolder<Members> m;
  74 + std::shared_ptr<Members> m;
75 75 };
76 76  
77 77 #endif // QPDF_FILEINPUTSOURCE_HH
... ...
include/qpdf/InputSource.hh
... ... @@ -114,7 +114,7 @@ class QPDF_DLL_CLASS InputSource
114 114 Members(Members const&);
115 115 };
116 116  
117   - PointerHolder<Members> m;
  117 + std::shared_ptr<Members> m;
118 118 };
119 119  
120 120 #endif // QPDF_INPUTSOURCE_HH
... ...
include/qpdf/JSON.hh
... ... @@ -219,7 +219,7 @@ class JSON
219 219 std::shared_ptr<JSON_value> value;
220 220 };
221 221  
222   - PointerHolder<Members> m;
  222 + std::shared_ptr<Members> m;
223 223 };
224 224  
225 225 #endif // JSON_HH
... ...
include/qpdf/Pl_Buffer.hh
... ... @@ -59,7 +59,7 @@ class Pl_Buffer: public Pipeline
59 59  
60 60 // Same as getBuffer but wraps the result in a shared pointer.
61 61 QPDF_DLL
62   - PointerHolder<Buffer> getBufferSharedPointer();
  62 + std::shared_ptr<Buffer> getBufferSharedPointer();
63 63  
64 64 // getMallocBuffer behaves in the same was as getBuffer except the
65 65 // buffer is allocated with malloc(), making it suitable for use
... ... @@ -84,11 +84,11 @@ class Pl_Buffer: public Pipeline
84 84 Members(Members const&);
85 85  
86 86 bool ready;
87   - PointerHolder<Buffer> data;
  87 + std::shared_ptr<Buffer> data;
88 88 size_t total_size;
89 89 };
90 90  
91   - PointerHolder<Members> m;
  91 + std::shared_ptr<Members> m;
92 92 };
93 93  
94 94 #endif // PL_BUFFER_HH
... ...
include/qpdf/Pl_Concatenate.hh
... ... @@ -63,7 +63,7 @@ class Pl_Concatenate: public Pipeline
63 63 Members(Members const&);
64 64 };
65 65  
66   - PointerHolder<Members> m;
  66 + std::shared_ptr<Members> m;
67 67 };
68 68  
69 69 #endif // PL_CONCATENATE_HH
... ...
include/qpdf/Pl_Count.hh
... ... @@ -66,7 +66,7 @@ class Pl_Count: public Pipeline
66 66 unsigned char last_char;
67 67 };
68 68  
69   - PointerHolder<Members> m;
  69 + std::shared_ptr<Members> m;
70 70 };
71 71  
72 72 #endif // PL_COUNT_HH
... ...
include/qpdf/Pl_DCT.hh
... ... @@ -106,7 +106,7 @@ class Pl_DCT: public Pipeline
106 106 CompressConfig* config_callback;
107 107 };
108 108  
109   - PointerHolder<Members> m;
  109 + std::shared_ptr<Members> m;
110 110 };
111 111  
112 112 #endif // PL_DCT_HH
... ...
include/qpdf/Pl_Discard.hh
... ... @@ -56,7 +56,7 @@ class Pl_Discard: public Pipeline
56 56 Members(Members const&);
57 57 };
58 58  
59   - PointerHolder<Members> m;
  59 + std::shared_ptr<Members> m;
60 60 };
61 61  
62 62 #endif // PL_DISCARD_HH
... ...
include/qpdf/Pl_Flate.hh
... ... @@ -85,7 +85,7 @@ class Pl_Flate: public Pipeline
85 85 std::function<void(char const*, int)> callback;
86 86 };
87 87  
88   - PointerHolder<Members> m;
  88 + std::shared_ptr<Members> m;
89 89 };
90 90  
91 91 #endif // PL_FLATE_HH
... ...
include/qpdf/Pl_QPDFTokenizer.hh
... ... @@ -76,7 +76,7 @@ class Pl_QPDFTokenizer: public Pipeline
76 76 QPDFTokenizer tokenizer;
77 77 Pl_Buffer buf;
78 78 };
79   - PointerHolder<Members> m;
  79 + std::shared_ptr<Members> m;
80 80 };
81 81  
82 82 #endif // PL_QPDFTOKENIZER_HH
... ...
include/qpdf/Pl_RunLength.hh
... ... @@ -64,7 +64,7 @@ class Pl_RunLength: public Pipeline
64 64 unsigned int length;
65 65 };
66 66  
67   - PointerHolder<Members> m;
  67 + std::shared_ptr<Members> m;
68 68 };
69 69  
70 70 #endif // PL_RUNLENGTH_HH
... ...
include/qpdf/Pl_StdioFile.hh
... ... @@ -63,7 +63,7 @@ class Pl_StdioFile: public Pipeline
63 63 FILE* file;
64 64 };
65 65  
66   - PointerHolder<Members> m;
  66 + std::shared_ptr<Members> m;
67 67 };
68 68  
69 69 #endif // PL_STDIOFILE_HH
... ...
include/qpdf/QPDF.hh
... ... @@ -108,7 +108,7 @@ class QPDF
108 108 // InputSource and use this method.
109 109 QPDF_DLL
110 110 void
111   - processInputSource(PointerHolder<InputSource>, char const* password = 0);
  111 + processInputSource(std::shared_ptr<InputSource>, char const* password = 0);
112 112  
113 113 // Close or otherwise release the input source. Once this has been
114 114 // called, no other methods of qpdf can be called safely except
... ... @@ -714,7 +714,7 @@ class QPDF
714 714 std::map<int, QPDFXRefEntry> const& xref,
715 715 std::map<int, qpdf_offset_t> const& lengths,
716 716 std::map<int, int> const& obj_renumber,
717   - PointerHolder<Buffer>& hint_stream,
  717 + std::shared_ptr<Buffer>& hint_stream,
718 718 int& S,
719 719 int& O)
720 720 {
... ... @@ -742,14 +742,14 @@ class QPDF
742 742 friend class QPDFObjectHandle;
743 743  
744 744 private:
745   - static PointerHolder<QPDFObject>
  745 + static std::shared_ptr<QPDFObject>
746 746 resolve(QPDF* qpdf, int objid, int generation)
747 747 {
748 748 return qpdf->resolve(objid, generation);
749 749 }
750 750 static bool
751 751 objectChanged(
752   - QPDF* qpdf, QPDFObjGen const& og, PointerHolder<QPDFObject>& oph)
  752 + QPDF* qpdf, QPDFObjGen const& og, std::shared_ptr<QPDFObject>& oph)
753 753 {
754 754 return qpdf->objectChanged(og, oph);
755 755 }
... ... @@ -841,7 +841,7 @@ class QPDF
841 841 {
842 842 }
843 843 ObjCache(
844   - PointerHolder<QPDFObject> object,
  844 + std::shared_ptr<QPDFObject> object,
845 845 qpdf_offset_t end_before_space,
846 846 qpdf_offset_t end_after_space) :
847 847 object(object),
... ... @@ -850,7 +850,7 @@ class QPDF
850 850 {
851 851 }
852 852  
853   - PointerHolder<QPDFObject> object;
  853 + std::shared_ptr<QPDFObject> object;
854 854 qpdf_offset_t end_before_space;
855 855 qpdf_offset_t end_after_space;
856 856 };
... ... @@ -896,8 +896,8 @@ class QPDF
896 896  
897 897 public:
898 898 ForeignStreamData(
899   - PointerHolder<EncryptionParameters> encp,
900   - PointerHolder<InputSource> file,
  899 + std::shared_ptr<EncryptionParameters> encp,
  900 + std::shared_ptr<InputSource> file,
901 901 int foreign_objid,
902 902 int foreign_generation,
903 903 qpdf_offset_t offset,
... ... @@ -905,8 +905,8 @@ class QPDF
905 905 QPDFObjectHandle local_dict);
906 906  
907 907 private:
908   - PointerHolder<EncryptionParameters> encp;
909   - PointerHolder<InputSource> file;
  908 + std::shared_ptr<EncryptionParameters> encp;
  909 + std::shared_ptr<InputSource> file;
910 910 int foreign_objid;
911 911 int foreign_generation;
912 912 qpdf_offset_t offset;
... ... @@ -930,12 +930,12 @@ class QPDF
930 930 void registerForeignStream(
931 931 QPDFObjGen const& local_og, QPDFObjectHandle foreign_stream);
932 932 void registerForeignStream(
933   - QPDFObjGen const& local_og, PointerHolder<ForeignStreamData>);
  933 + QPDFObjGen const& local_og, std::shared_ptr<ForeignStreamData>);
934 934  
935 935 private:
936 936 QPDF& destination_qpdf;
937 937 std::map<QPDFObjGen, QPDFObjectHandle> foreign_streams;
938   - std::map<QPDFObjGen, PointerHolder<ForeignStreamData>>
  938 + std::map<QPDFObjGen, std::shared_ptr<ForeignStreamData>>
939 939 foreign_stream_data;
940 940 };
941 941  
... ... @@ -994,18 +994,18 @@ class QPDF
994 994 void setLastObjectDescription(
995 995 std::string const& description, int objid, int generation);
996 996 QPDFObjectHandle readObject(
997   - PointerHolder<InputSource>,
  997 + std::shared_ptr<InputSource>,
998 998 std::string const& description,
999 999 int objid,
1000 1000 int generation,
1001 1001 bool in_object_stream);
1002 1002 size_t recoverStreamLength(
1003   - PointerHolder<InputSource> input,
  1003 + std::shared_ptr<InputSource> input,
1004 1004 int objid,
1005 1005 int generation,
1006 1006 qpdf_offset_t stream_offset);
1007 1007 QPDFTokenizer::Token
1008   - readToken(PointerHolder<InputSource>, size_t max_len = 0);
  1008 + readToken(std::shared_ptr<InputSource>, size_t max_len = 0);
1009 1009  
1010 1010 QPDFObjectHandle readObjectAtOffset(
1011 1011 bool attempt_recovery,
... ... @@ -1015,8 +1015,8 @@ class QPDF
1015 1015 int exp_generation,
1016 1016 int& act_objid,
1017 1017 int& act_generation);
1018   - bool objectChanged(QPDFObjGen const& og, PointerHolder<QPDFObject>& oph);
1019   - PointerHolder<QPDFObject> resolve(int objid, int generation);
  1018 + bool objectChanged(QPDFObjGen const& og, std::shared_ptr<QPDFObject>& oph);
  1019 + std::shared_ptr<QPDFObject> resolve(int objid, int generation);
1020 1020 void resolveObjectsInStream(int obj_stream_number);
1021 1021 void stopOnError(std::string const& message);
1022 1022  
... ... @@ -1031,13 +1031,13 @@ class QPDF
1031 1031 bool suppress_warnings,
1032 1032 bool will_retry);
1033 1033 bool pipeForeignStreamData(
1034   - PointerHolder<ForeignStreamData>,
  1034 + std::shared_ptr<ForeignStreamData>,
1035 1035 Pipeline*,
1036 1036 bool suppress_warnings,
1037 1037 bool will_retry);
1038 1038 static bool pipeStreamData(
1039   - PointerHolder<QPDF::EncryptionParameters> encp,
1040   - PointerHolder<InputSource> file,
  1039 + std::shared_ptr<QPDF::EncryptionParameters> encp,
  1040 + std::shared_ptr<InputSource> file,
1041 1041 QPDF& qpdf_for_warning,
1042 1042 int objid,
1043 1043 int generation,
... ... @@ -1064,7 +1064,7 @@ class QPDF
1064 1064 std::map<int, QPDFXRefEntry> const& xref,
1065 1065 std::map<int, qpdf_offset_t> const& lengths,
1066 1066 std::map<int, int> const& obj_renumber,
1067   - PointerHolder<Buffer>& hint_stream,
  1067 + std::shared_ptr<Buffer>& hint_stream,
1068 1068 int& S,
1069 1069 int& O);
1070 1070  
... ... @@ -1089,10 +1089,10 @@ class QPDF
1089 1089  
1090 1090 // methods to support encryption -- implemented in QPDF_encryption.cc
1091 1091 static encryption_method_e
1092   - interpretCF(PointerHolder<EncryptionParameters> encp, QPDFObjectHandle);
  1092 + interpretCF(std::shared_ptr<EncryptionParameters> encp, QPDFObjectHandle);
1093 1093 void initializeEncryption();
1094 1094 static std::string getKeyForObject(
1095   - PointerHolder<EncryptionParameters> encp,
  1095 + std::shared_ptr<EncryptionParameters> encp,
1096 1096 int objid,
1097 1097 int generation,
1098 1098 bool use_aes);
... ... @@ -1106,8 +1106,8 @@ class QPDF
1106 1106 EncryptionData const& data,
1107 1107 bool& perms_valid);
1108 1108 static void decryptStream(
1109   - PointerHolder<EncryptionParameters> encp,
1110   - PointerHolder<InputSource> file,
  1109 + std::shared_ptr<EncryptionParameters> encp,
  1110 + std::shared_ptr<InputSource> file,
1111 1111 QPDF& qpdf_for_warning,
1112 1112 Pipeline*& pipeline,
1113 1113 int objid,
... ... @@ -1522,7 +1522,7 @@ class QPDF
1522 1522  
1523 1523 unsigned long long unique_id;
1524 1524 QPDFTokenizer tokenizer;
1525   - PointerHolder<InputSource> file;
  1525 + std::shared_ptr<InputSource> file;
1526 1526 std::string last_object_description;
1527 1527 bool provided_password_is_hex_key;
1528 1528 bool ignore_xref_streams;
... ... @@ -1530,7 +1530,7 @@ class QPDF
1530 1530 std::ostream* out_stream;
1531 1531 std::ostream* err_stream;
1532 1532 bool attempt_recovery;
1533   - PointerHolder<EncryptionParameters> encp;
  1533 + std::shared_ptr<EncryptionParameters> encp;
1534 1534 std::string pdf_version;
1535 1535 std::map<QPDFObjGen, QPDFXRefEntry> xref_table;
1536 1536 std::set<int> deleted_objects;
... ... @@ -1542,7 +1542,7 @@ class QPDF
1542 1542 bool pushed_inherited_attributes_to_pages;
1543 1543 std::vector<QPDFExc> warnings;
1544 1544 std::map<unsigned long long, ObjCopier> object_copiers;
1545   - PointerHolder<QPDFObjectHandle::StreamDataProvider> copied_streams;
  1545 + std::shared_ptr<QPDFObjectHandle::StreamDataProvider> copied_streams;
1546 1546 // copied_stream_data_provider is owned by copied_streams
1547 1547 CopiedStreamDataProvider* copied_stream_data_provider;
1548 1548 bool reconstructed_xref;
... ... @@ -1590,7 +1590,7 @@ class QPDF
1590 1590 // Keep all member variables inside the Members object, which we
1591 1591 // dynamically allocate. This makes it possible to add new private
1592 1592 // members without breaking binary compatibility.
1593   - PointerHolder<Members> m;
  1593 + std::shared_ptr<Members> m;
1594 1594 };
1595 1595  
1596 1596 #endif // QPDF_HH
... ...
include/qpdf/QPDFAcroFormDocumentHelper.hh
... ... @@ -305,7 +305,7 @@ class QPDFAcroFormDocumentHelper: public QPDFDocumentHelper
305 305 std::map<std::string, std::set<QPDFObjGen>> name_to_fields;
306 306 };
307 307  
308   - PointerHolder<Members> m;
  308 + std::shared_ptr<Members> m;
309 309 };
310 310  
311 311 #endif // QPDFACROFORMDOCUMENTHELPER_HH
... ...
include/qpdf/QPDFAnnotationObjectHelper.hh
... ... @@ -115,7 +115,7 @@ class QPDFAnnotationObjectHelper: public QPDFObjectHelper
115 115 Members(Members const&);
116 116 };
117 117  
118   - PointerHolder<Members> m;
  118 + std::shared_ptr<Members> m;
119 119 };
120 120  
121 121 #endif // QPDFANNOTATIONOBJECTHELPER_HH
... ...
include/qpdf/QPDFEFStreamObjectHelper.hh
... ... @@ -74,7 +74,7 @@ class QPDFEFStreamObjectHelper: public QPDFObjectHelper
74 74 // parameters may be supplied using setters defined below.
75 75 QPDF_DLL
76 76 static QPDFEFStreamObjectHelper
77   - createEFStream(QPDF& qpdf, PointerHolder<Buffer> data);
  77 + createEFStream(QPDF& qpdf, std::shared_ptr<Buffer> data);
78 78 QPDF_DLL
79 79 static QPDFEFStreamObjectHelper
80 80 createEFStream(QPDF& qpdf, std::string const& data);
... ... @@ -116,7 +116,7 @@ class QPDFEFStreamObjectHelper: public QPDFObjectHelper
116 116 Members(Members const&) = delete;
117 117 };
118 118  
119   - PointerHolder<Members> m;
  119 + std::shared_ptr<Members> m;
120 120 };
121 121  
122 122 #endif // QPDFEFSTREAMOBJECTHELPER_HH
... ...
include/qpdf/QPDFEmbeddedFileDocumentHelper.hh
... ... @@ -91,7 +91,7 @@ class QPDFEmbeddedFileDocumentHelper: public QPDFDocumentHelper
91 91 std::shared_ptr<QPDFNameTreeObjectHelper> embedded_files;
92 92 };
93 93  
94   - PointerHolder<Members> m;
  94 + std::shared_ptr<Members> m;
95 95 };
96 96  
97 97 #endif // QPDFEMBEDDEDFILEDOCUMENTHELPER_HH
... ...
include/qpdf/QPDFFileSpecObjectHelper.hh
... ... @@ -113,7 +113,7 @@ class QPDFFileSpecObjectHelper: public QPDFObjectHelper
113 113 Members(Members const&) = delete;
114 114 };
115 115  
116   - PointerHolder<Members> m;
  116 + std::shared_ptr<Members> m;
117 117 };
118 118  
119 119 #endif // QPDFFILESPECOBJECTHELPER_HH
... ...
include/qpdf/QPDFFormFieldObjectHelper.hh
... ... @@ -236,7 +236,7 @@ class QPDFFormFieldObjectHelper: public QPDFObjectHelper
236 236 Members(Members const&);
237 237 };
238 238  
239   - PointerHolder<Members> m;
  239 + std::shared_ptr<Members> m;
240 240 };
241 241  
242 242 #endif // QPDFFORMFIELDOBJECTHELPER_HH
... ...
include/qpdf/QPDFJob.hh
... ... @@ -453,7 +453,7 @@ class QPDFJob
453 453 std::shared_ptr<QPDF> processFile(
454 454 char const* filename, char const* password, bool used_for_input);
455 455 std::shared_ptr<QPDF> processInputSource(
456   - PointerHolder<InputSource> is,
  456 + std::shared_ptr<InputSource> is,
457 457 char const* password,
458 458 bool used_for_input);
459 459 std::shared_ptr<QPDF> doProcess(
... ...
include/qpdf/QPDFNameTreeObjectHelper.hh
... ... @@ -204,7 +204,7 @@ class QPDFNameTreeObjectHelper: public QPDFObjectHelper
204 204 std::shared_ptr<NNTreeImpl> impl;
205 205 };
206 206  
207   - PointerHolder<Members> m;
  207 + std::shared_ptr<Members> m;
208 208 };
209 209  
210 210 #endif // QPDFNAMETREEOBJECTHELPER_HH
... ...
include/qpdf/QPDFNumberTreeObjectHelper.hh
... ... @@ -226,7 +226,7 @@ class QPDFNumberTreeObjectHelper: public QPDFObjectHelper
226 226 std::shared_ptr<NNTreeImpl> impl;
227 227 };
228 228  
229   - PointerHolder<Members> m;
  229 + std::shared_ptr<Members> m;
230 230 };
231 231  
232 232 #endif // QPDFNUMBERTREEOBJECTHELPER_HH
... ...
include/qpdf/QPDFObjectHandle.hh
... ... @@ -434,7 +434,7 @@ class QPDFObjectHandle
434 434 // objects that are ready from the object's input stream.
435 435 QPDF_DLL
436 436 static QPDFObjectHandle parse(
437   - PointerHolder<InputSource> input,
  437 + std::shared_ptr<InputSource> input,
438 438 std::string const& object_description,
439 439 QPDFTokenizer&,
440 440 bool& empty,
... ... @@ -490,7 +490,7 @@ class QPDFObjectHandle
490 490 // handle the case of pages whose contents are split across
491 491 // multiple streams.
492 492 QPDF_DLL
493   - void addTokenFilter(PointerHolder<TokenFilter> token_filter);
  493 + void addTokenFilter(std::shared_ptr<TokenFilter> token_filter);
494 494  
495 495 // Legacy helpers for parsing content streams. These methods are
496 496 // not going away, but newer code should call the correspond
... ... @@ -506,7 +506,7 @@ class QPDFObjectHandle
506 506 QPDF_DLL
507 507 void pipePageContents(Pipeline* p);
508 508 QPDF_DLL
509   - void addContentTokenFilter(PointerHolder<TokenFilter> token_filter);
  509 + void addContentTokenFilter(std::shared_ptr<TokenFilter> token_filter);
510 510 // End legacy content stream helpers
511 511  
512 512 // Called on a stream to filter the stream as if it were page
... ... @@ -618,11 +618,11 @@ class QPDFObjectHandle
618 618 // uncompressed stream data. Example programs are provided that
619 619 // illustrate this.
620 620 QPDF_DLL
621   - static QPDFObjectHandle newStream(QPDF* qpdf, PointerHolder<Buffer> data);
  621 + static QPDFObjectHandle newStream(QPDF* qpdf, std::shared_ptr<Buffer> data);
622 622  
623 623 // Create new stream with data from string. This method will
624 624 // create a copy of the data rather than using the user-provided
625   - // buffer as in the PointerHolder<Buffer> version of newStream.
  625 + // buffer as in the std::shared_ptr<Buffer> version of newStream.
626 626 QPDF_DLL
627 627 static QPDFObjectHandle newStream(QPDF* qpdf, std::string const& data);
628 628  
... ... @@ -1089,12 +1089,12 @@ class QPDFObjectHandle
1089 1089 // Returns filtered (uncompressed) stream data. Throws an
1090 1090 // exception if the stream is filtered and we can't decode it.
1091 1091 QPDF_DLL
1092   - PointerHolder<Buffer>
  1092 + std::shared_ptr<Buffer>
1093 1093 getStreamData(qpdf_stream_decode_level_e level = qpdf_dl_generalized);
1094 1094  
1095 1095 // Returns unfiltered (raw) stream data.
1096 1096 QPDF_DLL
1097   - PointerHolder<Buffer> getRawStreamData();
  1097 + std::shared_ptr<Buffer> getRawStreamData();
1098 1098  
1099 1099 // Write stream data through the given pipeline. A null pipeline
1100 1100 // value may be used if all you want to do is determine whether a
... ... @@ -1201,13 +1201,13 @@ class QPDFObjectHandle
1201 1201 // decryption filters have been applied, is as presented.
1202 1202 QPDF_DLL
1203 1203 void replaceStreamData(
1204   - PointerHolder<Buffer> data,
  1204 + std::shared_ptr<Buffer> data,
1205 1205 QPDFObjectHandle const& filter,
1206 1206 QPDFObjectHandle const& decode_parms);
1207 1207  
1208 1208 // Replace the stream's stream data with the given string.
1209 1209 // This method will create a copy of the data rather than using
1210   - // the user-provided buffer as in the PointerHolder<Buffer> version
  1210 + // the user-provided buffer as in the std::shared_ptr<Buffer> version
1211 1211 // of replaceStreamData.
1212 1212 QPDF_DLL
1213 1213 void replaceStreamData(
... ... @@ -1242,7 +1242,7 @@ class QPDFObjectHandle
1242 1242 // compute the length in advance.
1243 1243 QPDF_DLL
1244 1244 void replaceStreamData(
1245   - PointerHolder<StreamDataProvider> provider,
  1245 + std::shared_ptr<StreamDataProvider> provider,
1246 1246 QPDFObjectHandle const& filter,
1247 1247 QPDFObjectHandle const& decode_parms);
1248 1248  
... ... @@ -1373,7 +1373,7 @@ class QPDFObjectHandle
1373 1373 friend class QPDF;
1374 1374  
1375 1375 private:
1376   - static PointerHolder<QPDFObject>
  1376 + static std::shared_ptr<QPDFObject>
1377 1377 getObject(QPDFObjectHandle& o)
1378 1378 {
1379 1379 o.dereference();
... ... @@ -1496,10 +1496,10 @@ class QPDFObjectHandle
1496 1496 QPDFObjectHandle,
1497 1497 QPDF*,
1498 1498 std::string const&,
1499   - PointerHolder<InputSource>,
  1499 + std::shared_ptr<InputSource>,
1500 1500 qpdf_offset_t);
1501 1501 static QPDFObjectHandle parseInternal(
1502   - PointerHolder<InputSource> input,
  1502 + std::shared_ptr<InputSource> input,
1503 1503 std::string const& object_description,
1504 1504 QPDFTokenizer& tokenizer,
1505 1505 bool& empty,
... ... @@ -1510,7 +1510,7 @@ class QPDFObjectHandle
1510 1510 void parseContentStream_internal(
1511 1511 std::string const& description, ParserCallbacks* callbacks);
1512 1512 static void parseContentStream_data(
1513   - PointerHolder<Buffer>,
  1513 + std::shared_ptr<Buffer>,
1514 1514 std::string const& description,
1515 1515 ParserCallbacks* callbacks,
1516 1516 QPDF* context);
... ... @@ -1527,7 +1527,7 @@ class QPDFObjectHandle
1527 1527 QPDF* qpdf;
1528 1528 int objid; // 0 for direct object
1529 1529 int generation;
1530   - PointerHolder<QPDFObject> obj;
  1530 + std::shared_ptr<QPDFObject> obj;
1531 1531 bool reserved;
1532 1532 };
1533 1533  
... ... @@ -1629,7 +1629,7 @@ class QPDFObjectHandle::QPDFDictItems
1629 1629 std::set<std::string>::iterator iter;
1630 1630 bool is_end;
1631 1631 };
1632   - PointerHolder<Members> m;
  1632 + std::shared_ptr<Members> m;
1633 1633 value_type ivalue;
1634 1634 };
1635 1635  
... ... @@ -1727,7 +1727,7 @@ class QPDFObjectHandle::QPDFArrayItems
1727 1727 int item_number;
1728 1728 bool is_end;
1729 1729 };
1730   - PointerHolder<Members> m;
  1730 + std::shared_ptr<Members> m;
1731 1731 value_type ivalue;
1732 1732 };
1733 1733  
... ...
include/qpdf/QPDFOutlineDocumentHelper.hh
... ... @@ -97,11 +97,11 @@ class QPDFOutlineDocumentHelper: public QPDFDocumentHelper
97 97 std::vector<QPDFOutlineObjectHelper> outlines;
98 98 std::set<QPDFObjGen> seen;
99 99 QPDFObjectHandle dest_dict;
100   - PointerHolder<QPDFNameTreeObjectHelper> names_dest;
  100 + std::shared_ptr<QPDFNameTreeObjectHelper> names_dest;
101 101 std::map<QPDFObjGen, std::vector<QPDFOutlineObjectHelper>> by_page;
102 102 };
103 103  
104   - PointerHolder<Members> m;
  104 + std::shared_ptr<Members> m;
105 105 };
106 106  
107 107 #endif // QPDFOUTLINEDOCUMENTHELPER_HH
... ...
include/qpdf/QPDFOutlineObjectHelper.hh
... ... @@ -51,7 +51,7 @@ class QPDFOutlineObjectHelper: public QPDFObjectHelper
51 51 // Return parent pointer. Returns a null pointer if this is a
52 52 // top-level outline.
53 53 QPDF_DLL
54   - PointerHolder<QPDFOutlineObjectHelper> getParent();
  54 + std::shared_ptr<QPDFOutlineObjectHelper> getParent();
55 55  
56 56 // Return children as a list.
57 57 QPDF_DLL
... ... @@ -112,11 +112,11 @@ class QPDFOutlineObjectHelper: public QPDFObjectHelper
112 112 Members(Members const&);
113 113  
114 114 QPDFOutlineDocumentHelper& dh;
115   - PointerHolder<QPDFOutlineObjectHelper> parent;
  115 + std::shared_ptr<QPDFOutlineObjectHelper> parent;
116 116 std::vector<QPDFOutlineObjectHelper> kids;
117 117 };
118 118  
119   - PointerHolder<Members> m;
  119 + std::shared_ptr<Members> m;
120 120 };
121 121  
122 122 #endif // QPDFOUTLINEOBJECTHELPER_HH
... ...
include/qpdf/QPDFPageDocumentHelper.hh
... ... @@ -151,7 +151,7 @@ class QPDFPageDocumentHelper: public QPDFDocumentHelper
151 151 Members(Members const&);
152 152 };
153 153  
154   - PointerHolder<Members> m;
  154 + std::shared_ptr<Members> m;
155 155 };
156 156  
157 157 #endif // QPDFPAGEDOCUMENTHELPER_HH
... ...
include/qpdf/QPDFPageLabelDocumentHelper.hh
... ... @@ -96,10 +96,10 @@ class QPDFPageLabelDocumentHelper: public QPDFDocumentHelper
96 96 Members();
97 97 Members(Members const&);
98 98  
99   - PointerHolder<QPDFNumberTreeObjectHelper> labels;
  99 + std::shared_ptr<QPDFNumberTreeObjectHelper> labels;
100 100 };
101 101  
102   - PointerHolder<Members> m;
  102 + std::shared_ptr<Members> m;
103 103 };
104 104  
105 105 #endif // QPDFPAGELABELDOCUMENTHELPER_HH
... ...
include/qpdf/QPDFPageObjectHelper.hh
... ... @@ -225,7 +225,7 @@ class QPDFPageObjectHelper: public QPDFObjectHelper
225 225 // stream. Also works on form XObjects.
226 226 QPDF_DLL
227 227 void addContentTokenFilter(
228   - PointerHolder<QPDFObjectHandle::TokenFilter> token_filter);
  228 + std::shared_ptr<QPDFObjectHandle::TokenFilter> token_filter);
229 229  
230 230 // A page's resources dictionary maps names to objects elsewhere
231 231 // in the file. This method walks through a page's contents and
... ... @@ -397,7 +397,7 @@ class QPDFPageObjectHelper: public QPDFObjectHelper
397 397 Members(Members const&);
398 398 };
399 399  
400   - PointerHolder<Members> m;
  400 + std::shared_ptr<Members> m;
401 401 };
402 402  
403 403 #endif // QPDFPAGEOBJECTHELPER_HH
... ...
include/qpdf/QPDFTokenizer.hh
... ... @@ -173,7 +173,7 @@ class QPDFTokenizer
173 173 // beginning of the token.
174 174 QPDF_DLL
175 175 Token readToken(
176   - PointerHolder<InputSource> input,
  176 + std::shared_ptr<InputSource> input,
177 177 std::string const& context,
178 178 bool allow_bad = false,
179 179 size_t max_len = 0);
... ... @@ -187,7 +187,7 @@ class QPDFTokenizer
187 187 // tt_inline_image or tt_bad. This is the only way readToken
188 188 // returns a tt_inline_image token.
189 189 QPDF_DLL
190   - void expectInlineImage(PointerHolder<InputSource> input);
  190 + void expectInlineImage(std::shared_ptr<InputSource> input);
191 191  
192 192 private:
193 193 QPDFTokenizer(QPDFTokenizer const&) = delete;
... ... @@ -196,7 +196,7 @@ class QPDFTokenizer
196 196 void resolveLiteral();
197 197 bool isSpace(char);
198 198 bool isDelimiter(char);
199   - void findEI(PointerHolder<InputSource> input);
  199 + void findEI(std::shared_ptr<InputSource> input);
200 200  
201 201 enum state_e {
202 202 st_top,
... ... @@ -246,7 +246,7 @@ class QPDFTokenizer
246 246 bool last_char_was_bs;
247 247 bool last_char_was_cr;
248 248 };
249   - PointerHolder<Members> m;
  249 + std::shared_ptr<Members> m;
250 250 };
251 251  
252 252 #endif // QPDFTOKENIZER_HH
... ...
include/qpdf/QPDFWriter.hh
... ... @@ -128,7 +128,7 @@ class QPDFWriter
128 128  
129 129 // Return getBuffer() in a shared pointer.
130 130 QPDF_DLL
131   - PointerHolder<Buffer> getBufferSharedPointer();
  131 + std::shared_ptr<Buffer> getBufferSharedPointer();
132 132  
133 133 // Supply your own pipeline object. Output will be written to
134 134 // this pipeline, and QPDFWriter will call finish() on the
... ... @@ -499,7 +499,7 @@ class QPDFWriter
499 499 // If you want to be notified of progress, derive a class from
500 500 // ProgressReporter and override the reportProgress method.
501 501 QPDF_DLL
502   - void registerProgressReporter(PointerHolder<ProgressReporter>);
  502 + void registerProgressReporter(std::shared_ptr<ProgressReporter>);
503 503  
504 504 // Return the PDF version that will be written into the header.
505 505 // Calling this method does all the preparation for writing, so it
... ... @@ -550,7 +550,7 @@ class QPDFWriter
550 550 friend class QPDFWriter;
551 551  
552 552 public:
553   - PipelinePopper(QPDFWriter* qw, PointerHolder<Buffer>* bp = 0) :
  553 + PipelinePopper(QPDFWriter* qw, std::shared_ptr<Buffer>* bp = 0) :
554 554 qw(qw),
555 555 bp(bp)
556 556 {
... ... @@ -559,7 +559,7 @@ class QPDFWriter
559 559  
560 560 private:
561 561 QPDFWriter* qw;
562   - PointerHolder<Buffer>* bp;
  562 + std::shared_ptr<Buffer>* bp;
563 563 std::string stack_id;
564 564 };
565 565 friend class PipelinePopper;
... ... @@ -567,7 +567,7 @@ class QPDFWriter
567 567 unsigned int bytesNeeded(long long n);
568 568 void writeBinary(unsigned long long val, unsigned int bytes);
569 569 void writeString(std::string const& str);
570   - void writeBuffer(PointerHolder<Buffer>&);
  570 + void writeBuffer(std::shared_ptr<Buffer>&);
571 571 void writeStringQDF(std::string const& str);
572 572 void writeStringNoQDF(std::string const& str);
573 573 void writePad(int nspaces);
... ... @@ -587,7 +587,7 @@ class QPDFWriter
587 587 QPDFObjectHandle stream,
588 588 bool& compress_stream,
589 589 bool& is_metadata,
590   - PointerHolder<Buffer>* stream_data);
  590 + std::shared_ptr<Buffer>* stream_data);
591 591 void unparseObject(
592 592 QPDFObjectHandle object,
593 593 int level,
... ... @@ -791,7 +791,7 @@ class QPDFWriter
791 791 std::map<int, int> object_to_object_stream_no_gen;
792 792  
793 793 // For progress reporting
794   - PointerHolder<ProgressReporter> progress_reporter;
  794 + std::shared_ptr<ProgressReporter> progress_reporter;
795 795 int events_expected;
796 796 int events_seen;
797 797 int next_progress_report;
... ... @@ -800,7 +800,7 @@ class QPDFWriter
800 800 // Keep all member variables inside the Members object, which we
801 801 // dynamically allocate. This makes it possible to add new private
802 802 // members without breaking binary compatibility.
803   - PointerHolder<Members> m;
  803 + std::shared_ptr<Members> m;
804 804 };
805 805  
806 806 #endif // QPDFWRITER_HH
... ...
include/qpdf/QUtil.hh
... ... @@ -420,7 +420,7 @@ namespace QUtil
420 420  
421 421 QPDF_DLL
422 422 void read_file_into_memory(
423   - char const* filename, PointerHolder<char>& file_buf, size_t& size);
  423 + char const* filename, std::shared_ptr<char>& file_buf, size_t& size);
424 424  
425 425 // This used to be called strcasecmp, but that is a macro on some
426 426 // platforms, so we have to give it a name that is not likely to
... ...
libqpdf/Buffer.cc
... ... @@ -52,7 +52,7 @@ void
52 52 Buffer::copy(Buffer const& rhs)
53 53 {
54 54 if (this != &rhs) {
55   - this->m = PointerHolder<Members>(new Members(rhs.m->size, 0, true));
  55 + this->m = std::shared_ptr<Members>(new Members(rhs.m->size, 0, true));
56 56 if (this->m->size) {
57 57 memcpy(this->m->buf, rhs.m->buf, this->m->size);
58 58 }
... ...
libqpdf/ClosedFileInputSource.cc
... ... @@ -26,7 +26,7 @@ void
26 26 ClosedFileInputSource::before()
27 27 {
28 28 if (0 == this->m->fis.get()) {
29   - this->m->fis = make_pointer_holder<FileInputSource>();
  29 + this->m->fis = std::make_shared<FileInputSource>();
30 30 this->m->fis->setFilename(this->m->filename.c_str());
31 31 this->m->fis->seek(this->m->offset, SEEK_SET);
32 32 this->m->fis->setLastOffset(this->last_offset);
... ...
libqpdf/FileInputSource.cc
... ... @@ -26,7 +26,7 @@ FileInputSource::FileInputSource() :
26 26 void
27 27 FileInputSource::setFilename(char const* filename)
28 28 {
29   - this->m = PointerHolder<Members>(new Members(true));
  29 + this->m = std::shared_ptr<Members>(new Members(true));
30 30 this->m->filename = filename;
31 31 this->m->file = QUtil::safe_fopen(filename, "rb");
32 32 }
... ... @@ -34,7 +34,7 @@ FileInputSource::setFilename(char const* filename)
34 34 void
35 35 FileInputSource::setFile(char const* description, FILE* filep, bool close_file)
36 36 {
37   - this->m = PointerHolder<Members>(new Members(close_file));
  37 + this->m = std::shared_ptr<Members>(new Members(close_file));
38 38 this->m->filename = description;
39 39 this->m->file = filep;
40 40 this->seek(0, SEEK_SET);
... ...
libqpdf/OffsetInputSource.cc
... ... @@ -5,7 +5,7 @@
5 5 #include <stdexcept>
6 6  
7 7 OffsetInputSource::OffsetInputSource(
8   - PointerHolder<InputSource> proxied, qpdf_offset_t global_offset) :
  8 + std::shared_ptr<InputSource> proxied, qpdf_offset_t global_offset) :
9 9 proxied(proxied),
10 10 global_offset(global_offset)
11 11 {
... ...
libqpdf/Pl_Buffer.cc
... ... @@ -30,13 +30,13 @@ void
30 30 Pl_Buffer::write(unsigned char* buf, size_t len)
31 31 {
32 32 if (this->m->data.get() == 0) {
33   - this->m->data = make_pointer_holder<Buffer>(len);
  33 + this->m->data = std::make_shared<Buffer>(len);
34 34 }
35 35 size_t cur_size = this->m->data->getSize();
36 36 size_t left = cur_size - this->m->total_size;
37 37 if (left < len) {
38 38 size_t new_size = std::max(this->m->total_size + len, 2 * cur_size);
39   - auto b = make_pointer_holder<Buffer>(new_size);
  39 + auto b = std::make_shared<Buffer>(new_size);
40 40 memcpy(b->getBuffer(), this->m->data->getBuffer(), this->m->total_size);
41 41 this->m->data = b;
42 42 }
... ... @@ -72,14 +72,14 @@ Pl_Buffer::getBuffer()
72 72 unsigned char* p = b->getBuffer();
73 73 memcpy(p, this->m->data->getBuffer(), this->m->total_size);
74 74 }
75   - this->m = PointerHolder<Members>(new Members());
  75 + this->m = std::shared_ptr<Members>(new Members());
76 76 return b;
77 77 }
78 78  
79   -PointerHolder<Buffer>
  79 +std::shared_ptr<Buffer>
80 80 Pl_Buffer::getBufferSharedPointer()
81 81 {
82   - return PointerHolder<Buffer>(getBuffer());
  82 + return std::shared_ptr<Buffer>(getBuffer());
83 83 }
84 84  
85 85 void
... ... @@ -97,5 +97,5 @@ Pl_Buffer::getMallocBuffer(unsigned char** buf, size_t* len)
97 97 } else {
98 98 *buf = nullptr;
99 99 }
100   - this->m = PointerHolder<Members>(new Members());
  100 + this->m = std::shared_ptr<Members>(new Members());
101 101 }
... ...
libqpdf/Pl_DCT.cc
... ... @@ -95,7 +95,7 @@ Pl_DCT::finish()
95 95 {
96 96 this->m->buf.finish();
97 97  
98   - // Using a PointerHolder<Buffer> here and passing it into compress
  98 + // Using a std::shared_ptr<Buffer> here and passing it into compress
99 99 // and decompress causes a memory leak with setjmp/longjmp. Just
100 100 // use a pointer and delete it.
101 101 Buffer* b = this->m->buf.getBuffer();
... ...
libqpdf/Pl_PNGFilter.cc
... ... @@ -48,9 +48,9 @@ Pl_PNGFilter::Pl_PNGFilter(
48 48 }
49 49 this->bytes_per_row = bpr & UINT_MAX;
50 50 this->buf1 =
51   - make_array_pointer_holder<unsigned char>(this->bytes_per_row + 1);
  51 + QUtil::make_shared_array<unsigned char>(this->bytes_per_row + 1);
52 52 this->buf2 =
53   - make_array_pointer_holder<unsigned char>(this->bytes_per_row + 1);
  53 + QUtil::make_shared_array<unsigned char>(this->bytes_per_row + 1);
54 54 memset(this->buf1.get(), 0, this->bytes_per_row + 1);
55 55 memset(this->buf2.get(), 0, this->bytes_per_row + 1);
56 56 this->cur_row = this->buf1.get();
... ...
libqpdf/Pl_QPDFTokenizer.cc
... ... @@ -44,7 +44,7 @@ void
44 44 Pl_QPDFTokenizer::finish()
45 45 {
46 46 this->m->buf.finish();
47   - auto input = PointerHolder<InputSource>(
  47 + auto input = std::shared_ptr<InputSource>(
48 48 // line-break
49 49 new BufferInputSource(
50 50 "tokenizer data", this->m->buf.getBuffer(), true));
... ...
libqpdf/Pl_RC4.cc
... ... @@ -12,7 +12,7 @@ Pl_RC4::Pl_RC4(
12 12 out_bufsize(out_bufsize),
13 13 rc4(key_data, key_len)
14 14 {
15   - this->outbuf = make_array_pointer_holder<unsigned char>(out_bufsize);
  15 + this->outbuf = QUtil::make_shared_array<unsigned char>(out_bufsize);
16 16 }
17 17  
18 18 Pl_RC4::~Pl_RC4()
... ...
libqpdf/Pl_TIFFPredictor.cc
... ... @@ -41,7 +41,7 @@ Pl_TIFFPredictor::Pl_TIFFPredictor(
41 41 }
42 42 this->bytes_per_row = bpr & UINT_MAX;
43 43 this->cur_row =
44   - make_array_pointer_holder<unsigned char>(this->bytes_per_row);
  44 + QUtil::make_shared_array<unsigned char>(this->bytes_per_row);
45 45 memset(this->cur_row.get(), 0, this->bytes_per_row);
46 46 }
47 47  
... ...
libqpdf/QPDF.cc
... ... @@ -106,8 +106,8 @@ class InvalidInputSource: public InputSource
106 106 };
107 107  
108 108 QPDF::ForeignStreamData::ForeignStreamData(
109   - PointerHolder<EncryptionParameters> encp,
110   - PointerHolder<InputSource> file,
  109 + std::shared_ptr<EncryptionParameters> encp,
  110 + std::shared_ptr<InputSource> file,
111 111 int foreign_objid,
112 112 int foreign_generation,
113 113 qpdf_offset_t offset,
... ... @@ -138,7 +138,7 @@ QPDF::CopiedStreamDataProvider::provideStreamData(
138 138 bool suppress_warnings,
139 139 bool will_retry)
140 140 {
141   - PointerHolder<ForeignStreamData> foreign_data =
  141 + std::shared_ptr<ForeignStreamData> foreign_data =
142 142 this->foreign_stream_data[QPDFObjGen(objid, generation)];
143 143 bool result = false;
144 144 if (foreign_data.get()) {
... ... @@ -165,7 +165,8 @@ QPDF::CopiedStreamDataProvider::registerForeignStream(
165 165  
166 166 void
167 167 QPDF::CopiedStreamDataProvider::registerForeignStream(
168   - QPDFObjGen const& local_og, PointerHolder<ForeignStreamData> foreign_stream)
  168 + QPDFObjGen const& local_og,
  169 + std::shared_ptr<ForeignStreamData> foreign_stream)
169 170 {
170 171 this->foreign_stream_data[local_og] = foreign_stream;
171 172 }
... ... @@ -249,7 +250,7 @@ QPDF::~QPDF()
249 250 // If two objects are mutually referential (through each object
250 251 // having an array or dictionary that contains an indirect
251 252 // reference to the other), the circular references in the
252   - // PointerHolder objects will prevent the objects from being
  253 + // std::shared_ptr objects will prevent the objects from being
253 254 // deleted. Walk through all objects in the object cache, which
254 255 // is those objects that we read from the file, and break all
255 256 // resolved references. At this point, obviously no one is still
... ... @@ -274,7 +275,7 @@ QPDF::processFile(char const* filename, char const* password)
274 275 {
275 276 FileInputSource* fi = new FileInputSource();
276 277 fi->setFilename(filename);
277   - processInputSource(PointerHolder<InputSource>(fi), password);
  278 + processInputSource(std::shared_ptr<InputSource>(fi), password);
278 279 }
279 280  
280 281 void
... ... @@ -283,7 +284,7 @@ QPDF::processFile(
283 284 {
284 285 FileInputSource* fi = new FileInputSource();
285 286 fi->setFile(description, filep, close_file);
286   - processInputSource(PointerHolder<InputSource>(fi), password);
  287 + processInputSource(std::shared_ptr<InputSource>(fi), password);
287 288 }
288 289  
289 290 void
... ... @@ -294,7 +295,7 @@ QPDF::processMemoryFile(
294 295 char const* password)
295 296 {
296 297 processInputSource(
297   - PointerHolder<InputSource>(
  298 + std::shared_ptr<InputSource>(
298 299 // line-break
299 300 new BufferInputSource(
300 301 description,
... ... @@ -305,7 +306,7 @@ QPDF::processMemoryFile(
305 306  
306 307 void
307 308 QPDF::processInputSource(
308   - PointerHolder<InputSource> source, char const* password)
  309 + std::shared_ptr<InputSource> source, char const* password)
309 310 {
310 311 this->m->file = source;
311 312 parse(password);
... ... @@ -314,7 +315,7 @@ QPDF::processInputSource(
314 315 void
315 316 QPDF::closeInputSource()
316 317 {
317   - this->m->file = PointerHolder<InputSource>(new InvalidInputSource());
  318 + this->m->file = std::shared_ptr<InputSource>(new InvalidInputSource());
318 319 }
319 320  
320 321 void
... ... @@ -425,7 +426,7 @@ QPDF::findHeader()
425 426 // offsets in the file are such that 0 points to the
426 427 // beginning of the header.
427 428 QTC::TC("qpdf", "QPDF global offset");
428   - this->m->file = PointerHolder<InputSource>(
  429 + this->m->file = std::shared_ptr<InputSource>(
429 430 new OffsetInputSource(this->m->file, global_offset));
430 431 }
431 432 }
... ... @@ -1182,7 +1183,7 @@ QPDF::processXRefStream(qpdf_offset_t xref_offset, QPDFObjectHandle&amp; xref_obj)
1182 1183 // that this multiplication does not cause an overflow.
1183 1184 size_t expected_size = entry_size * num_entries;
1184 1185  
1185   - PointerHolder<Buffer> bp = xref_obj.getStreamData(qpdf_dl_specialized);
  1186 + std::shared_ptr<Buffer> bp = xref_obj.getStreamData(qpdf_dl_specialized);
1186 1187 size_t actual_size = bp->getSize();
1187 1188  
1188 1189 if (expected_size != actual_size) {
... ... @@ -1516,7 +1517,7 @@ QPDF::setLastObjectDescription(
1516 1517  
1517 1518 QPDFObjectHandle
1518 1519 QPDF::readObject(
1519   - PointerHolder<InputSource> input,
  1520 + std::shared_ptr<InputSource> input,
1520 1521 std::string const& description,
1521 1522 int objid,
1522 1523 int generation,
... ... @@ -1526,11 +1527,11 @@ QPDF::readObject(
1526 1527 qpdf_offset_t offset = input->tell();
1527 1528  
1528 1529 bool empty = false;
1529   - PointerHolder<StringDecrypter> decrypter_ph;
  1530 + std::shared_ptr<StringDecrypter> decrypter_ph;
1530 1531 StringDecrypter* decrypter = 0;
1531 1532 if (this->m->encp->encrypted && (!in_object_stream)) {
1532 1533 decrypter_ph =
1533   - make_pointer_holder<StringDecrypter>(this, objid, generation);
  1534 + std::make_shared<StringDecrypter>(this, objid, generation);
1534 1535 decrypter = decrypter_ph.get();
1535 1536 }
1536 1537 QPDFObjectHandle object = QPDFObjectHandle::parse(
... ... @@ -1706,7 +1707,7 @@ QPDF::findEndstream()
1706 1707  
1707 1708 size_t
1708 1709 QPDF::recoverStreamLength(
1709   - PointerHolder<InputSource> input,
  1710 + std::shared_ptr<InputSource> input,
1710 1711 int objid,
1711 1712 int generation,
1712 1713 qpdf_offset_t stream_offset)
... ... @@ -1784,7 +1785,7 @@ QPDF::recoverStreamLength(
1784 1785 }
1785 1786  
1786 1787 QPDFTokenizer::Token
1787   -QPDF::readToken(PointerHolder<InputSource> input, size_t max_len)
  1788 +QPDF::readToken(std::shared_ptr<InputSource> input, size_t max_len)
1788 1789 {
1789 1790 return this->m->tokenizer.readToken(
1790 1791 input, this->m->last_object_description, true, max_len);
... ... @@ -1971,7 +1972,7 @@ QPDF::readObjectAtOffset(
1971 1972 }
1972 1973  
1973 1974 bool
1974   -QPDF::objectChanged(QPDFObjGen const& og, PointerHolder<QPDFObject>& oph)
  1975 +QPDF::objectChanged(QPDFObjGen const& og, std::shared_ptr<QPDFObject>& oph)
1975 1976 {
1976 1977 // See if the object cached at og, if any, is the one passed in.
1977 1978 // QPDFObjectHandle uses this to detect outdated handles to
... ... @@ -1992,7 +1993,7 @@ QPDF::objectChanged(QPDFObjGen const&amp; og, PointerHolder&lt;QPDFObject&gt;&amp; oph)
1992 1993 return (c->second.object.get() != oph.get());
1993 1994 }
1994 1995  
1995   -PointerHolder<QPDFObject>
  1996 +std::shared_ptr<QPDFObject>
1996 1997 QPDF::resolve(int objid, int generation)
1997 1998 {
1998 1999 // Check object cache before checking xref table. This allows us
... ... @@ -2011,7 +2012,7 @@ QPDF::resolve(int objid, int generation)
2011 2012 this->m->file->getLastOffset(),
2012 2013 ("loop detected resolving object " + QUtil::int_to_string(objid) +
2013 2014 " " + QUtil::int_to_string(generation))));
2014   - return PointerHolder<QPDFObject>(new QPDF_Null);
  2015 + return std::shared_ptr<QPDFObject>(new QPDF_Null);
2015 2016 }
2016 2017 ResolveRecorder rr(this, og);
2017 2018  
... ... @@ -2071,7 +2072,7 @@ QPDF::resolve(int objid, int generation)
2071 2072 ObjCache(QPDFObjectHandle::ObjAccessor::getObject(oh), -1, -1);
2072 2073 }
2073 2074  
2074   - PointerHolder<QPDFObject> result(this->m->obj_cache[og].object);
  2075 + std::shared_ptr<QPDFObject> result(this->m->obj_cache[og].object);
2075 2076 if (!result->hasDescription()) {
2076 2077 result->setDescription(
2077 2078 this,
... ... @@ -2135,8 +2136,8 @@ QPDF::resolveObjectsInStream(int obj_stream_number)
2135 2136  
2136 2137 std::map<int, int> offsets;
2137 2138  
2138   - PointerHolder<Buffer> bp = obj_stream.getStreamData(qpdf_dl_specialized);
2139   - auto input = PointerHolder<InputSource>(
  2139 + std::shared_ptr<Buffer> bp = obj_stream.getStreamData(qpdf_dl_specialized);
  2140 + auto input = std::shared_ptr<InputSource>(
2140 2141 // line-break
2141 2142 new BufferInputSource(
2142 2143 (this->m->file->getName() + " object stream " +
... ... @@ -2496,7 +2497,7 @@ QPDF::copyStreamData(QPDFObjectHandle result, QPDFObjectHandle foreign)
2496 2497 this->m->copied_stream_data_provider =
2497 2498 new CopiedStreamDataProvider(*this);
2498 2499 this->m->copied_streams =
2499   - PointerHolder<QPDFObjectHandle::StreamDataProvider>(
  2500 + std::shared_ptr<QPDFObjectHandle::StreamDataProvider>(
2500 2501 this->m->copied_stream_data_provider);
2501 2502 }
2502 2503 QPDFObjGen local_og(result.getObjGen());
... ... @@ -2513,7 +2514,7 @@ QPDF::copyStreamData(QPDFObjectHandle result, QPDFObjectHandle foreign)
2513 2514 throw std::logic_error("unable to retrieve underlying"
2514 2515 " stream object from foreign stream");
2515 2516 }
2516   - PointerHolder<Buffer> stream_buffer = stream->getStreamDataBuffer();
  2517 + std::shared_ptr<Buffer> stream_buffer = stream->getStreamDataBuffer();
2517 2518 if ((foreign_stream_qpdf->m->immediate_copy_from) &&
2518 2519 (stream_buffer.get() == 0)) {
2519 2520 // Pull the stream data into a buffer before attempting
... ... @@ -2527,7 +2528,7 @@ QPDF::copyStreamData(QPDFObjectHandle result, QPDFObjectHandle foreign)
2527 2528 old_dict.getKey("/DecodeParms"));
2528 2529 stream_buffer = stream->getStreamDataBuffer();
2529 2530 }
2530   - PointerHolder<QPDFObjectHandle::StreamDataProvider> stream_provider =
  2531 + std::shared_ptr<QPDFObjectHandle::StreamDataProvider> stream_provider =
2531 2532 stream->getStreamDataProvider();
2532 2533 if (stream_buffer.get()) {
2533 2534 QTC::TC("qpdf", "QPDF copy foreign stream with buffer");
... ... @@ -2543,7 +2544,7 @@ QPDF::copyStreamData(QPDFObjectHandle result, QPDFObjectHandle foreign)
2543 2544 dict.getKey("/Filter"),
2544 2545 dict.getKey("/DecodeParms"));
2545 2546 } else {
2546   - auto foreign_stream_data = make_pointer_holder<ForeignStreamData>(
  2547 + auto foreign_stream_data = std::make_shared<ForeignStreamData>(
2547 2548 foreign_stream_qpdf->m->encp,
2548 2549 foreign_stream_qpdf->m->file,
2549 2550 foreign.getObjectID(),
... ... @@ -2758,8 +2759,8 @@ QPDF::getCompressibleObjGens()
2758 2759  
2759 2760 bool
2760 2761 QPDF::pipeStreamData(
2761   - PointerHolder<EncryptionParameters> encp,
2762   - PointerHolder<InputSource> file,
  2762 + std::shared_ptr<EncryptionParameters> encp,
  2763 + std::shared_ptr<InputSource> file,
2763 2764 QPDF& qpdf_for_warning,
2764 2765 int objid,
2765 2766 int generation,
... ... @@ -2870,7 +2871,7 @@ QPDF::pipeStreamData(
2870 2871  
2871 2872 bool
2872 2873 QPDF::pipeForeignStreamData(
2873   - PointerHolder<ForeignStreamData> foreign,
  2874 + std::shared_ptr<ForeignStreamData> foreign,
2874 2875 Pipeline* pipeline,
2875 2876 bool suppress_warnings,
2876 2877 bool will_retry)
... ...
libqpdf/QPDFAcroFormDocumentHelper.cc
... ... @@ -772,7 +772,7 @@ QPDFAcroFormDocumentHelper::adjustAppearanceStream(
772 772 QTC::TC("qpdf", "QPDFAcroFormDocumentHelper AP parse error");
773 773 }
774 774 auto rr = new ResourceReplacer(dr_map, rf.getNamesByResourceType());
775   - auto tf = PointerHolder<QPDFObjectHandle::TokenFilter>(rr);
  775 + auto tf = std::shared_ptr<QPDFObjectHandle::TokenFilter>(rr);
776 776 stream.addTokenFilter(tf);
777 777 } catch (std::exception& e) {
778 778 // No way to reproduce in test suite right now since error
... ... @@ -792,13 +792,13 @@ QPDFAcroFormDocumentHelper::transformAnnotations(
792 792 QPDF* from_qpdf,
793 793 QPDFAcroFormDocumentHelper* from_afdh)
794 794 {
795   - PointerHolder<QPDFAcroFormDocumentHelper> afdhph;
  795 + std::shared_ptr<QPDFAcroFormDocumentHelper> afdhph;
796 796 if (!from_qpdf) {
797 797 // Assume these are from the same QPDF.
798 798 from_qpdf = &this->qpdf;
799 799 from_afdh = this;
800 800 } else if ((from_qpdf != &this->qpdf) && (!from_afdh)) {
801   - afdhph = make_pointer_holder<QPDFAcroFormDocumentHelper>(*from_qpdf);
  801 + afdhph = std::make_shared<QPDFAcroFormDocumentHelper>(*from_qpdf);
802 802 from_afdh = afdhph.get();
803 803 }
804 804 bool foreign = (from_qpdf != &this->qpdf);
... ...
libqpdf/QPDFEFStreamObjectHelper.cc
... ... @@ -92,7 +92,8 @@ QPDFEFStreamObjectHelper::getChecksum()
92 92 }
93 93  
94 94 QPDFEFStreamObjectHelper
95   -QPDFEFStreamObjectHelper::createEFStream(QPDF& qpdf, PointerHolder<Buffer> data)
  95 +QPDFEFStreamObjectHelper::createEFStream(
  96 + QPDF& qpdf, std::shared_ptr<Buffer> data)
96 97 {
97 98 return newFromStream(QPDFObjectHandle::newStream(&qpdf, data));
98 99 }
... ...
libqpdf/QPDFFormFieldObjectHelper.cc
... ... @@ -915,6 +915,6 @@ QPDFFormFieldObjectHelper::generateTextAppearance(
915 915  
916 916 AS.addTokenFilter(
917 917 // line-break
918   - PointerHolder<QPDFObjectHandle::TokenFilter>(
  918 + std::shared_ptr<QPDFObjectHandle::TokenFilter>(
919 919 new ValueSetter(DA, V, opt, tf, bbox)));
920 920 }
... ...
libqpdf/QPDFJob.cc
... ... @@ -1879,7 +1879,7 @@ QPDFJob::processFile(
1879 1879  
1880 1880 std::shared_ptr<QPDF>
1881 1881 QPDFJob::processInputSource(
1882   - PointerHolder<InputSource> is, char const* password, bool used_for_input)
  1882 + std::shared_ptr<InputSource> is, char const* password, bool used_for_input)
1883 1883 {
1884 1884 auto f1 = std::mem_fn(&QPDF::processInputSource);
1885 1885 auto fn = std::bind(f1, std::placeholders::_1, is, std::placeholders::_2);
... ... @@ -2238,7 +2238,7 @@ QPDFJob::handleTransformations(QPDF&amp; pdf)
2238 2238 m->oi_min_height,
2239 2239 m->oi_min_area,
2240 2240 image);
2241   - PointerHolder<QPDFObjectHandle::StreamDataProvider> sdp(io);
  2241 + std::shared_ptr<QPDFObjectHandle::StreamDataProvider> sdp(io);
2242 2242 if (io->evaluate(
2243 2243 "image " + name + " on page " +
2244 2244 QUtil::int_to_string(pageno))) {
... ... @@ -2494,17 +2494,17 @@ QPDFJob::handlePageSpecs(
2494 2494 cout << prefix << ": processing " << page_spec.filename
2495 2495 << std::endl;
2496 2496 });
2497   - PointerHolder<InputSource> is;
  2497 + std::shared_ptr<InputSource> is;
2498 2498 ClosedFileInputSource* cis = 0;
2499 2499 if (!m->keep_files_open) {
2500 2500 QTC::TC("qpdf", "QPDFJob keep files open n");
2501 2501 cis = new ClosedFileInputSource(page_spec.filename.c_str());
2502   - is = PointerHolder<InputSource>(cis);
  2502 + is = std::shared_ptr<InputSource>(cis);
2503 2503 cis->stayOpen(true);
2504 2504 } else {
2505 2505 QTC::TC("qpdf", "QPDFJob keep files open y");
2506 2506 FileInputSource* fis = new FileInputSource();
2507   - is = PointerHolder<InputSource>(fis);
  2507 + is = std::shared_ptr<InputSource>(fis);
2508 2508 fis->setFilename(page_spec.filename.c_str());
2509 2509 }
2510 2510 std::shared_ptr<QPDF> qpdf_ph =
... ... @@ -3064,12 +3064,13 @@ QPDFJob::setWriterOptions(QPDF&amp; pdf, QPDFWriter&amp; w)
3064 3064 w.forcePDFVersion(version, extension_level);
3065 3065 }
3066 3066 if (m->progress && m->outfilename) {
3067   - w.registerProgressReporter(PointerHolder<QPDFWriter::ProgressReporter>(
3068   - // line-break
3069   - new ProgressReporter(
3070   - *(this->m->cout),
3071   - this->m->message_prefix,
3072   - m->outfilename.get())));
  3067 + w.registerProgressReporter(
  3068 + std::shared_ptr<QPDFWriter::ProgressReporter>(
  3069 + // line-break
  3070 + new ProgressReporter(
  3071 + *(this->m->cout),
  3072 + this->m->message_prefix,
  3073 + m->outfilename.get())));
3073 3074 }
3074 3075 }
3075 3076  
... ...
libqpdf/QPDFJob_config.cc
... ... @@ -685,7 +685,7 @@ QPDFJob::Config::showObject(std::string const&amp; parameter)
685 685 QPDFJob::Config*
686 686 QPDFJob::Config::jobJsonFile(std::string const& parameter)
687 687 {
688   - PointerHolder<char> file_buf;
  688 + std::shared_ptr<char> file_buf;
689 689 size_t size;
690 690 QUtil::read_file_into_memory(parameter.c_str(), file_buf, size);
691 691 try {
... ...
libqpdf/QPDFObjectHandle.cc
... ... @@ -252,7 +252,7 @@ QPDFObjectHandle::setObjectDescriptionFromInput(
252 252 QPDFObjectHandle object,
253 253 QPDF* context,
254 254 std::string const& description,
255   - PointerHolder<InputSource> input,
  255 + std::shared_ptr<InputSource> input,
256 256 qpdf_offset_t offset)
257 257 {
258 258 object.setObjectDescription(
... ... @@ -1337,14 +1337,14 @@ QPDFObjectHandle::replaceDict(QPDFObjectHandle new_dict)
1337 1337 dynamic_cast<QPDF_Stream*>(obj.get())->replaceDict(new_dict);
1338 1338 }
1339 1339  
1340   -PointerHolder<Buffer>
  1340 +std::shared_ptr<Buffer>
1341 1341 QPDFObjectHandle::getStreamData(qpdf_stream_decode_level_e level)
1342 1342 {
1343 1343 assertStream();
1344 1344 return dynamic_cast<QPDF_Stream*>(obj.get())->getStreamData(level);
1345 1345 }
1346 1346  
1347   -PointerHolder<Buffer>
  1347 +std::shared_ptr<Buffer>
1348 1348 QPDFObjectHandle::getRawStreamData()
1349 1349 {
1350 1350 assertStream();
... ... @@ -1410,7 +1410,7 @@ QPDFObjectHandle::pipeStreamData(
1410 1410  
1411 1411 void
1412 1412 QPDFObjectHandle::replaceStreamData(
1413   - PointerHolder<Buffer> data,
  1413 + std::shared_ptr<Buffer> data,
1414 1414 QPDFObjectHandle const& filter,
1415 1415 QPDFObjectHandle const& decode_parms)
1416 1416 {
... ... @@ -1426,7 +1426,7 @@ QPDFObjectHandle::replaceStreamData(
1426 1426 QPDFObjectHandle const& decode_parms)
1427 1427 {
1428 1428 assertStream();
1429   - auto b = make_pointer_holder<Buffer>(data.length());
  1429 + auto b = std::make_shared<Buffer>(data.length());
1430 1430 unsigned char* bp = b->getBuffer();
1431 1431 memcpy(bp, data.c_str(), data.length());
1432 1432 dynamic_cast<QPDF_Stream*>(obj.get())->replaceStreamData(
... ... @@ -1435,7 +1435,7 @@ QPDFObjectHandle::replaceStreamData(
1435 1435  
1436 1436 void
1437 1437 QPDFObjectHandle::replaceStreamData(
1438   - PointerHolder<StreamDataProvider> provider,
  1438 + std::shared_ptr<StreamDataProvider> provider,
1439 1439 QPDFObjectHandle const& filter,
1440 1440 QPDFObjectHandle const& decode_parms)
1441 1441 {
... ... @@ -1487,7 +1487,7 @@ QPDFObjectHandle::replaceStreamData(
1487 1487 {
1488 1488 assertStream();
1489 1489 auto sdp =
1490   - PointerHolder<StreamDataProvider>(new FunctionProvider(provider));
  1490 + std::shared_ptr<StreamDataProvider>(new FunctionProvider(provider));
1491 1491 dynamic_cast<QPDF_Stream*>(obj.get())->replaceStreamData(
1492 1492 sdp, filter, decode_parms);
1493 1493 }
... ... @@ -1500,7 +1500,7 @@ QPDFObjectHandle::replaceStreamData(
1500 1500 {
1501 1501 assertStream();
1502 1502 auto sdp =
1503   - PointerHolder<StreamDataProvider>(new FunctionProvider(provider));
  1503 + std::shared_ptr<StreamDataProvider>(new FunctionProvider(provider));
1504 1504 dynamic_cast<QPDF_Stream*>(obj.get())->replaceStreamData(
1505 1505 sdp, filter, decode_parms);
1506 1506 }
... ... @@ -1694,7 +1694,7 @@ QPDFObjectHandle::coalesceContentStreams()
1694 1694 QPDFObjectHandle new_contents = newStream(qpdf);
1695 1695 this->replaceKey("/Contents", new_contents);
1696 1696  
1697   - auto provider = PointerHolder<StreamDataProvider>(
  1697 + auto provider = std::shared_ptr<StreamDataProvider>(
1698 1698 new CoalesceProvider(*this, contents));
1699 1699 new_contents.replaceStreamData(provider, newNull(), newNull());
1700 1700 }
... ... @@ -1772,7 +1772,7 @@ QPDFObjectHandle::parse(
1772 1772 std::string const& object_str,
1773 1773 std::string const& object_description)
1774 1774 {
1775   - auto input = PointerHolder<InputSource>(
  1775 + auto input = std::shared_ptr<InputSource>(
1776 1776 new BufferInputSource("parsed object", object_str));
1777 1777 QPDFTokenizer tokenizer;
1778 1778 bool empty = false;
... ... @@ -1908,13 +1908,13 @@ QPDFObjectHandle::parseContentStream_internal(
1908 1908  
1909 1909 void
1910 1910 QPDFObjectHandle::parseContentStream_data(
1911   - PointerHolder<Buffer> stream_data,
  1911 + std::shared_ptr<Buffer> stream_data,
1912 1912 std::string const& description,
1913 1913 ParserCallbacks* callbacks,
1914 1914 QPDF* context)
1915 1915 {
1916 1916 size_t stream_length = stream_data->getSize();
1917   - auto input = PointerHolder<InputSource>(
  1917 + auto input = std::shared_ptr<InputSource>(
1918 1918 new BufferInputSource(description, stream_data.get()));
1919 1919 QPDFTokenizer tokenizer;
1920 1920 tokenizer.allowEOF();
... ... @@ -1969,14 +1969,14 @@ QPDFObjectHandle::parseContentStream_data(
1969 1969 }
1970 1970  
1971 1971 void
1972   -QPDFObjectHandle::addContentTokenFilter(PointerHolder<TokenFilter> filter)
  1972 +QPDFObjectHandle::addContentTokenFilter(std::shared_ptr<TokenFilter> filter)
1973 1973 {
1974 1974 coalesceContentStreams();
1975 1975 this->getKey("/Contents").addTokenFilter(filter);
1976 1976 }
1977 1977  
1978 1978 void
1979   -QPDFObjectHandle::addTokenFilter(PointerHolder<TokenFilter> filter)
  1979 +QPDFObjectHandle::addTokenFilter(std::shared_ptr<TokenFilter> filter)
1980 1980 {
1981 1981 assertStream();
1982 1982 return dynamic_cast<QPDF_Stream*>(obj.get())->addTokenFilter(filter);
... ... @@ -1984,7 +1984,7 @@ QPDFObjectHandle::addTokenFilter(PointerHolder&lt;TokenFilter&gt; filter)
1984 1984  
1985 1985 QPDFObjectHandle
1986 1986 QPDFObjectHandle::parse(
1987   - PointerHolder<InputSource> input,
  1987 + std::shared_ptr<InputSource> input,
1988 1988 std::string const& object_description,
1989 1989 QPDFTokenizer& tokenizer,
1990 1990 bool& empty,
... ... @@ -1997,7 +1997,7 @@ QPDFObjectHandle::parse(
1997 1997  
1998 1998 QPDFObjectHandle
1999 1999 QPDFObjectHandle::parseInternal(
2000   - PointerHolder<InputSource> input,
  2000 + std::shared_ptr<InputSource> input,
2001 2001 std::string const& object_description,
2002 2002 QPDFTokenizer& tokenizer,
2003 2003 bool& empty,
... ... @@ -2698,7 +2698,7 @@ QPDFObjectHandle::newStream(QPDF* qpdf)
2698 2698 }
2699 2699  
2700 2700 QPDFObjectHandle
2701   -QPDFObjectHandle::newStream(QPDF* qpdf, PointerHolder<Buffer> data)
  2701 +QPDFObjectHandle::newStream(QPDF* qpdf, std::shared_ptr<Buffer> data)
2702 2702 {
2703 2703 QTC::TC("qpdf", "QPDFObjectHandle newStream with data");
2704 2704 QPDFObjectHandle result = newStream(qpdf);
... ... @@ -2836,26 +2836,27 @@ QPDFObjectHandle::copyObject(
2836 2836 this->objid = 0;
2837 2837 this->generation = 0;
2838 2838  
2839   - PointerHolder<QPDFObject> new_obj;
  2839 + std::shared_ptr<QPDFObject> new_obj;
2840 2840  
2841 2841 if (isBool()) {
2842 2842 QTC::TC("qpdf", "QPDFObjectHandle clone bool");
2843   - new_obj = PointerHolder<QPDFObject>(new QPDF_Bool(getBoolValue()));
  2843 + new_obj = std::shared_ptr<QPDFObject>(new QPDF_Bool(getBoolValue()));
2844 2844 } else if (isNull()) {
2845 2845 QTC::TC("qpdf", "QPDFObjectHandle clone null");
2846   - new_obj = PointerHolder<QPDFObject>(new QPDF_Null());
  2846 + new_obj = std::shared_ptr<QPDFObject>(new QPDF_Null());
2847 2847 } else if (isInteger()) {
2848 2848 QTC::TC("qpdf", "QPDFObjectHandle clone integer");
2849   - new_obj = PointerHolder<QPDFObject>(new QPDF_Integer(getIntValue()));
  2849 + new_obj = std::shared_ptr<QPDFObject>(new QPDF_Integer(getIntValue()));
2850 2850 } else if (isReal()) {
2851 2851 QTC::TC("qpdf", "QPDFObjectHandle clone real");
2852   - new_obj = PointerHolder<QPDFObject>(new QPDF_Real(getRealValue()));
  2852 + new_obj = std::shared_ptr<QPDFObject>(new QPDF_Real(getRealValue()));
2853 2853 } else if (isName()) {
2854 2854 QTC::TC("qpdf", "QPDFObjectHandle clone name");
2855   - new_obj = PointerHolder<QPDFObject>(new QPDF_Name(getName()));
  2855 + new_obj = std::shared_ptr<QPDFObject>(new QPDF_Name(getName()));
2856 2856 } else if (isString()) {
2857 2857 QTC::TC("qpdf", "QPDFObjectHandle clone string");
2858   - new_obj = PointerHolder<QPDFObject>(new QPDF_String(getStringValue()));
  2858 + new_obj =
  2859 + std::shared_ptr<QPDFObject>(new QPDF_String(getStringValue()));
2859 2860 } else if (isArray()) {
2860 2861 QTC::TC("qpdf", "QPDFObjectHandle clone array");
2861 2862 std::vector<QPDFObjectHandle> items;
... ... @@ -2868,7 +2869,7 @@ QPDFObjectHandle::copyObject(
2868 2869 visited, cross_indirect, first_level_only, stop_at_streams);
2869 2870 }
2870 2871 }
2871   - new_obj = PointerHolder<QPDFObject>(new QPDF_Array(items));
  2872 + new_obj = std::shared_ptr<QPDFObject>(new QPDF_Array(items));
2872 2873 } else if (isDictionary()) {
2873 2874 QTC::TC("qpdf", "QPDFObjectHandle clone dictionary");
2874 2875 std::set<std::string> keys = getKeys();
... ... @@ -2883,7 +2884,7 @@ QPDFObjectHandle::copyObject(
2883 2884 visited, cross_indirect, first_level_only, stop_at_streams);
2884 2885 }
2885 2886 }
2886   - new_obj = PointerHolder<QPDFObject>(new QPDF_Dictionary(items));
  2887 + new_obj = std::shared_ptr<QPDFObject>(new QPDF_Dictionary(items));
2887 2888 } else {
2888 2889 throw std::logic_error("QPDFObjectHandle::makeDirectInternal: "
2889 2890 "unknown object type");
... ... @@ -3172,12 +3173,12 @@ QPDFObjectHandle::dereference()
3172 3173 this->obj = nullptr;
3173 3174 }
3174 3175 if (this->obj.get() == 0) {
3175   - PointerHolder<QPDFObject> obj =
  3176 + std::shared_ptr<QPDFObject> obj =
3176 3177 QPDF::Resolver::resolve(this->qpdf, this->objid, this->generation);
3177 3178 if (obj.get() == 0) {
3178 3179 // QPDF::resolve never returns an uninitialized object, but
3179 3180 // check just in case.
3180   - this->obj = PointerHolder<QPDFObject>(new QPDF_Null());
  3181 + this->obj = std::shared_ptr<QPDFObject>(new QPDF_Null());
3181 3182 } else if (dynamic_cast<QPDF_Reserved*>(obj.get())) {
3182 3183 // Do not resolve
3183 3184 } else {
... ...
libqpdf/QPDFOutlineDocumentHelper.cc
... ... @@ -100,7 +100,7 @@ QPDFOutlineDocumentHelper::resolveNamedDest(QPDFObjectHandle name)
100 100 QPDFObjectHandle dests = names.getKey("/Dests");
101 101 if (dests.isDictionary()) {
102 102 this->m->names_dest =
103   - make_pointer_holder<QPDFNameTreeObjectHelper>(
  103 + std::make_shared<QPDFNameTreeObjectHelper>(
104 104 dests, this->qpdf);
105 105 }
106 106 }
... ...
libqpdf/QPDFOutlineObjectHelper.cc
... ... @@ -31,13 +31,13 @@ QPDFOutlineObjectHelper::QPDFOutlineObjectHelper(
31 31 QPDFObjectHandle cur = oh.getKey("/First");
32 32 while (!cur.isNull()) {
33 33 QPDFOutlineObjectHelper new_ooh(cur, dh, 1 + depth);
34   - new_ooh.m->parent = make_pointer_holder<QPDFOutlineObjectHelper>(*this);
  34 + new_ooh.m->parent = std::make_shared<QPDFOutlineObjectHelper>(*this);
35 35 this->m->kids.push_back(new_ooh);
36 36 cur = cur.getKey("/Next");
37 37 }
38 38 }
39 39  
40   -PointerHolder<QPDFOutlineObjectHelper>
  40 +std::shared_ptr<QPDFOutlineObjectHelper>
41 41 QPDFOutlineObjectHelper::getParent()
42 42 {
43 43 return this->m->parent;
... ...
libqpdf/QPDFPageLabelDocumentHelper.cc
... ... @@ -16,7 +16,7 @@ QPDFPageLabelDocumentHelper::QPDFPageLabelDocumentHelper(QPDF&amp; qpdf) :
16 16 {
17 17 QPDFObjectHandle root = qpdf.getRoot();
18 18 if (root.hasKey("/PageLabels")) {
19   - this->m->labels = make_pointer_holder<QPDFNumberTreeObjectHelper>(
  19 + this->m->labels = std::make_shared<QPDFNumberTreeObjectHelper>(
20 20 root.getKey("/PageLabels"), this->qpdf);
21 21 }
22 22 }
... ...
libqpdf/QPDFPageObjectHelper.cc
... ... @@ -556,7 +556,7 @@ QPDFPageObjectHelper::pipeContents(Pipeline* p)
556 556  
557 557 void
558 558 QPDFPageObjectHelper::addContentTokenFilter(
559   - PointerHolder<QPDFObjectHandle::TokenFilter> token_filter)
  559 + std::shared_ptr<QPDFObjectHandle::TokenFilter> token_filter)
560 560 {
561 561 if (this->oh.isFormXObject()) {
562 562 this->oh.addTokenFilter(token_filter);
... ... @@ -776,7 +776,7 @@ QPDFPageObjectHelper::getFormXObjectForPage(bool handle_transformations)
776 776 " XObject created from page will not work");
777 777 }
778 778 newdict.replaceKey("/BBox", bbox);
779   - auto provider = PointerHolder<QPDFObjectHandle::StreamDataProvider>(
  779 + auto provider = std::shared_ptr<QPDFObjectHandle::StreamDataProvider>(
780 780 new ContentProvider(this->oh));
781 781 result.replaceStreamData(
782 782 provider, QPDFObjectHandle::newNull(), QPDFObjectHandle::newNull());
... ... @@ -1060,9 +1060,9 @@ QPDFPageObjectHelper::flattenRotation(QPDFAcroFormDocumentHelper* afdh)
1060 1060 std::vector<QPDFObjectHandle> new_annots;
1061 1061 std::vector<QPDFObjectHandle> new_fields;
1062 1062 std::set<QPDFObjGen> old_fields;
1063   - PointerHolder<QPDFAcroFormDocumentHelper> afdhph;
  1063 + std::shared_ptr<QPDFAcroFormDocumentHelper> afdhph;
1064 1064 if (!afdh) {
1065   - afdhph = make_pointer_holder<QPDFAcroFormDocumentHelper>(*qpdf);
  1065 + afdhph = std::make_shared<QPDFAcroFormDocumentHelper>(*qpdf);
1066 1066 afdh = afdhph.get();
1067 1067 }
1068 1068 afdh->transformAnnotations(
... ... @@ -1101,10 +1101,10 @@ QPDFPageObjectHelper::copyAnnotations(
1101 1101 std::vector<QPDFObjectHandle> new_annots;
1102 1102 std::vector<QPDFObjectHandle> new_fields;
1103 1103 std::set<QPDFObjGen> old_fields;
1104   - PointerHolder<QPDFAcroFormDocumentHelper> afdhph;
1105   - PointerHolder<QPDFAcroFormDocumentHelper> from_afdhph;
  1104 + std::shared_ptr<QPDFAcroFormDocumentHelper> afdhph;
  1105 + std::shared_ptr<QPDFAcroFormDocumentHelper> from_afdhph;
1106 1106 if (!afdh) {
1107   - afdhph = make_pointer_holder<QPDFAcroFormDocumentHelper>(*this_qpdf);
  1107 + afdhph = std::make_shared<QPDFAcroFormDocumentHelper>(*this_qpdf);
1108 1108 afdh = afdhph.get();
1109 1109 }
1110 1110 if (this_qpdf == from_qpdf) {
... ... @@ -1116,8 +1116,7 @@ QPDFPageObjectHelper::copyAnnotations(
1116 1116 " is not from the same QPDF as from_page");
1117 1117 }
1118 1118 } else {
1119   - from_afdhph =
1120   - make_pointer_holder<QPDFAcroFormDocumentHelper>(*from_qpdf);
  1119 + from_afdhph = std::make_shared<QPDFAcroFormDocumentHelper>(*from_qpdf);
1121 1120 from_afdh = from_afdhph.get();
1122 1121 }
1123 1122  
... ...
libqpdf/QPDFTokenizer.cc
... ... @@ -23,7 +23,8 @@ is_delimiter(char ch)
23 23 class QPDFWordTokenFinder: public InputSource::Finder
24 24 {
25 25 public:
26   - QPDFWordTokenFinder(PointerHolder<InputSource> is, std::string const& str) :
  26 + QPDFWordTokenFinder(
  27 + std::shared_ptr<InputSource> is, std::string const& str) :
27 28 is(is),
28 29 str(str)
29 30 {
... ... @@ -34,7 +35,7 @@ class QPDFWordTokenFinder: public InputSource::Finder
34 35 virtual bool check();
35 36  
36 37 private:
37   - PointerHolder<InputSource> is;
  38 + std::shared_ptr<InputSource> is;
38 39 std::string str;
39 40 };
40 41  
... ... @@ -503,7 +504,7 @@ QPDFTokenizer::presentEOF()
503 504 }
504 505  
505 506 void
506   -QPDFTokenizer::expectInlineImage(PointerHolder<InputSource> input)
  507 +QPDFTokenizer::expectInlineImage(std::shared_ptr<InputSource> input)
507 508 {
508 509 if (this->m->state != st_top) {
509 510 throw std::logic_error("QPDFTokenizer::expectInlineImage called"
... ... @@ -514,7 +515,7 @@ QPDFTokenizer::expectInlineImage(PointerHolder&lt;InputSource&gt; input)
514 515 }
515 516  
516 517 void
517   -QPDFTokenizer::findEI(PointerHolder<InputSource> input)
  518 +QPDFTokenizer::findEI(std::shared_ptr<InputSource> input)
518 519 {
519 520 if (!input.get()) {
520 521 return;
... ... @@ -645,7 +646,7 @@ QPDFTokenizer::betweenTokens()
645 646  
646 647 QPDFTokenizer::Token
647 648 QPDFTokenizer::readToken(
648   - PointerHolder<InputSource> input,
  649 + std::shared_ptr<InputSource> input,
649 650 std::string const& context,
650 651 bool allow_bad,
651 652 size_t max_len)
... ...
libqpdf/QPDFWriter.cc
... ... @@ -153,10 +153,10 @@ QPDFWriter::getBuffer()
153 153 return result;
154 154 }
155 155  
156   -PointerHolder<Buffer>
  156 +std::shared_ptr<Buffer>
157 157 QPDFWriter::getBufferSharedPointer()
158 158 {
159   - return PointerHolder<Buffer>(getBuffer());
  159 + return std::shared_ptr<Buffer>(getBuffer());
160 160 }
161 161  
162 162 void
... ... @@ -1081,7 +1081,7 @@ QPDFWriter::writeString(std::string const&amp; str)
1081 1081 }
1082 1082  
1083 1083 void
1084   -QPDFWriter::writeBuffer(PointerHolder<Buffer>& b)
  1084 +QPDFWriter::writeBuffer(std::shared_ptr<Buffer>& b)
1085 1085 {
1086 1086 this->m->pipeline->write(b->getBuffer(), b->getSize());
1087 1087 }
... ... @@ -1485,7 +1485,7 @@ QPDFWriter::willFilterStream(
1485 1485 QPDFObjectHandle stream,
1486 1486 bool& compress_stream,
1487 1487 bool& is_metadata,
1488   - PointerHolder<Buffer>* stream_data)
  1488 + std::shared_ptr<Buffer>* stream_data)
1489 1489 {
1490 1490 compress_stream = false;
1491 1491 is_metadata = false;
... ... @@ -1819,7 +1819,7 @@ QPDFWriter::unparseObject(
1819 1819 flags |= f_stream;
1820 1820 bool compress_stream = false;
1821 1821 bool is_metadata = false;
1822   - PointerHolder<Buffer> stream_data;
  1822 + std::shared_ptr<Buffer> stream_data;
1823 1823 if (willFilterStream(
1824 1824 object, compress_stream, is_metadata, &stream_data)) {
1825 1825 flags |= f_filtered;
... ... @@ -1924,7 +1924,7 @@ QPDFWriter::writeObjectStream(QPDFObjectHandle object)
1924 1924  
1925 1925 // Generate stream itself. We have to do this in two passes so we
1926 1926 // can calculate offsets in the first pass.
1927   - PointerHolder<Buffer> stream_buffer;
  1927 + std::shared_ptr<Buffer> stream_buffer;
1928 1928 int first_obj = -1;
1929 1929 bool compressed = false;
1930 1930 for (int pass = 1; pass <= 2; ++pass) {
... ... @@ -2667,7 +2667,7 @@ QPDFWriter::writeHeader()
2667 2667 void
2668 2668 QPDFWriter::writeHintStream(int hint_id)
2669 2669 {
2670   - PointerHolder<Buffer> hint_buffer;
  2670 + std::shared_ptr<Buffer> hint_buffer;
2671 2671 int S = 0;
2672 2672 int O = 0;
2673 2673 QPDF::Writer::generateHintStream(
... ... @@ -2839,7 +2839,7 @@ QPDFWriter::writeXRefStream(
2839 2839 p = pushPipeline(
2840 2840 new Pl_PNGFilter("pngify xref", p, Pl_PNGFilter::a_encode, esize));
2841 2841 }
2842   - PointerHolder<Buffer> xref_data;
  2842 + std::shared_ptr<Buffer> xref_data;
2843 2843 {
2844 2844 PipelinePopper pp_xref(this, &xref_data);
2845 2845 activatePipelineStack(pp_xref);
... ... @@ -3098,13 +3098,13 @@ QPDFWriter::writeLinearized()
3098 3098 }
3099 3099  
3100 3100 qpdf_offset_t hint_length = 0;
3101   - PointerHolder<Buffer> hint_buffer;
  3101 + std::shared_ptr<Buffer> hint_buffer;
3102 3102  
3103 3103 // Write file in two passes. Part numbers refer to PDF spec 1.4.
3104 3104  
3105 3105 FILE* lin_pass1_file = 0;
3106   - auto pp_pass1 = make_pointer_holder<PipelinePopper>(this);
3107   - auto pp_md5 = make_pointer_holder<PipelinePopper>(this);
  3106 + auto pp_pass1 = std::make_shared<PipelinePopper>(this);
  3107 + auto pp_md5 = std::make_shared<PipelinePopper>(this);
3108 3108 for (int pass = 1; pass <= 2; ++pass) {
3109 3109 if (pass == 1) {
3110 3110 if (!this->m->lin_pass1_filename.empty()) {
... ... @@ -3489,7 +3489,7 @@ QPDFWriter::indicateProgress(bool decrement, bool finished)
3489 3489 }
3490 3490  
3491 3491 void
3492   -QPDFWriter::registerProgressReporter(PointerHolder<ProgressReporter> pr)
  3492 +QPDFWriter::registerProgressReporter(std::shared_ptr<ProgressReporter> pr)
3493 3493 {
3494 3494 this->m->progress_reporter = pr;
3495 3495 }
... ... @@ -3497,7 +3497,7 @@ QPDFWriter::registerProgressReporter(PointerHolder&lt;ProgressReporter&gt; pr)
3497 3497 void
3498 3498 QPDFWriter::writeStandard()
3499 3499 {
3500   - auto pp_md5 = make_pointer_holder<PipelinePopper>(this);
  3500 + auto pp_md5 = std::make_shared<PipelinePopper>(this);
3501 3501 if (this->m->deterministic_id) {
3502 3502 pushMD5Pipeline(*pp_md5);
3503 3503 }
... ...
libqpdf/QPDF_Stream.cc
... ... @@ -221,19 +221,19 @@ QPDF_Stream::getLength() const
221 221 return this->length;
222 222 }
223 223  
224   -PointerHolder<Buffer>
  224 +std::shared_ptr<Buffer>
225 225 QPDF_Stream::getStreamDataBuffer() const
226 226 {
227 227 return this->stream_data;
228 228 }
229 229  
230   -PointerHolder<QPDFObjectHandle::StreamDataProvider>
  230 +std::shared_ptr<QPDFObjectHandle::StreamDataProvider>
231 231 QPDF_Stream::getStreamDataProvider() const
232 232 {
233 233 return this->stream_provider;
234 234 }
235 235  
236   -PointerHolder<Buffer>
  236 +std::shared_ptr<Buffer>
237 237 QPDF_Stream::getStreamData(qpdf_stream_decode_level_e decode_level)
238 238 {
239 239 Pl_Buffer buf("stream data buffer");
... ... @@ -251,7 +251,7 @@ QPDF_Stream::getStreamData(qpdf_stream_decode_level_e decode_level)
251 251 return buf.getBufferSharedPointer();
252 252 }
253 253  
254   -PointerHolder<Buffer>
  254 +std::shared_ptr<Buffer>
255 255 QPDF_Stream::getRawStreamData()
256 256 {
257 257 Pl_Buffer buf("stream data buffer");
... ... @@ -438,7 +438,7 @@ QPDF_Stream::pipeStreamData(
438 438 // objects.
439 439 std::vector<std::shared_ptr<Pipeline>> to_delete;
440 440  
441   - PointerHolder<ContentNormalizer> normalizer;
  441 + std::shared_ptr<ContentNormalizer> normalizer;
442 442 std::shared_ptr<Pipeline> new_pipeline;
443 443 if (filter) {
444 444 if (encode_flags & qpdf_ef_compress) {
... ... @@ -449,7 +449,7 @@ QPDF_Stream::pipeStreamData(
449 449 }
450 450  
451 451 if (encode_flags & qpdf_ef_normalize) {
452   - normalizer = make_pointer_holder<ContentNormalizer>();
  452 + normalizer = std::make_shared<ContentNormalizer>();
453 453 new_pipeline = std::make_shared<Pl_QPDFTokenizer>(
454 454 "normalizer", normalizer.get(), pipeline);
455 455 to_delete.push_back(new_pipeline);
... ... @@ -586,7 +586,7 @@ QPDF_Stream::pipeStreamData(
586 586  
587 587 void
588 588 QPDF_Stream::replaceStreamData(
589   - PointerHolder<Buffer> data,
  589 + std::shared_ptr<Buffer> data,
590 590 QPDFObjectHandle const& filter,
591 591 QPDFObjectHandle const& decode_parms)
592 592 {
... ... @@ -597,7 +597,7 @@ QPDF_Stream::replaceStreamData(
597 597  
598 598 void
599 599 QPDF_Stream::replaceStreamData(
600   - PointerHolder<QPDFObjectHandle::StreamDataProvider> provider,
  600 + std::shared_ptr<QPDFObjectHandle::StreamDataProvider> provider,
601 601 QPDFObjectHandle const& filter,
602 602 QPDFObjectHandle const& decode_parms)
603 603 {
... ... @@ -608,7 +608,7 @@ QPDF_Stream::replaceStreamData(
608 608  
609 609 void
610 610 QPDF_Stream::addTokenFilter(
611   - PointerHolder<QPDFObjectHandle::TokenFilter> token_filter)
  611 + std::shared_ptr<QPDFObjectHandle::TokenFilter> token_filter)
612 612 {
613 613 this->token_filters.push_back(token_filter);
614 614 }
... ...
libqpdf/QPDF_encryption.cc
... ... @@ -754,7 +754,8 @@ QPDF::recover_encryption_key_with_password(
754 754 }
755 755  
756 756 QPDF::encryption_method_e
757   -QPDF::interpretCF(PointerHolder<EncryptionParameters> encp, QPDFObjectHandle cf)
  757 +QPDF::interpretCF(
  758 + std::shared_ptr<EncryptionParameters> encp, QPDFObjectHandle cf)
758 759 {
759 760 if (cf.isName()) {
760 761 std::string filter = cf.getName();
... ... @@ -1079,7 +1080,7 @@ QPDF::initializeEncryption()
1079 1080  
1080 1081 std::string
1081 1082 QPDF::getKeyForObject(
1082   - PointerHolder<EncryptionParameters> encp,
  1083 + std::shared_ptr<EncryptionParameters> encp,
1083 1084 int objid,
1084 1085 int generation,
1085 1086 bool use_aes)
... ... @@ -1165,7 +1166,7 @@ QPDF::decryptString(std::string&amp; str, int objid, int generation)
1165 1166 } else {
1166 1167 QTC::TC("qpdf", "QPDF_encryption rc4 decode string");
1167 1168 size_t vlen = str.length();
1168   - // Using PointerHolder guarantees that tmp will
  1169 + // Using std::shared_ptr guarantees that tmp will
1169 1170 // be freed even if rc4.process throws an exception.
1170 1171 auto tmp = QUtil::make_unique_cstr(str);
1171 1172 RC4 rc4(QUtil::unsigned_char_pointer(key), toI(key.length()));
... ... @@ -1188,8 +1189,8 @@ QPDF::decryptString(std::string&amp; str, int objid, int generation)
1188 1189  
1189 1190 void
1190 1191 QPDF::decryptStream(
1191   - PointerHolder<EncryptionParameters> encp,
1192   - PointerHolder<InputSource> file,
  1192 + std::shared_ptr<EncryptionParameters> encp,
  1193 + std::shared_ptr<InputSource> file,
1193 1194 QPDF& qpdf_for_warning,
1194 1195 Pipeline*& pipeline,
1195 1196 int objid,
... ...
libqpdf/QPDF_linearization.cc
... ... @@ -2120,7 +2120,7 @@ QPDF::generateHintStream(
2120 2120 std::map<int, QPDFXRefEntry> const& xref,
2121 2121 std::map<int, qpdf_offset_t> const& lengths,
2122 2122 std::map<int, int> const& obj_renumber,
2123   - PointerHolder<Buffer>& hint_buffer,
  2123 + std::shared_ptr<Buffer>& hint_buffer,
2124 2124 int& S,
2125 2125 int& O)
2126 2126 {
... ...
libqpdf/QUtil.cc
... ... @@ -445,7 +445,7 @@ QUtil::os_wrapper(std::string const&amp; description, int status)
445 445 }
446 446  
447 447 #ifdef _WIN32
448   -static PointerHolder<wchar_t>
  448 +static std::shared_ptr<wchar_t>
449 449 win_convert_filename(char const* filename)
450 450 {
451 451 // Convert the utf-8 encoded filename argument to wchar_t*. First,
... ... @@ -454,7 +454,7 @@ win_convert_filename(char const* filename)
454 454 std::string u16 = QUtil::utf8_to_utf16(filename);
455 455 size_t len = u16.length();
456 456 size_t wlen = (len / 2) - 1;
457   - PointerHolder<wchar_t> wfilenamep(true, new wchar_t[wlen + 1]);
  457 + auto wfilenamep = QUtil::make_shared_array<wchar_t>(wlen + 1);
458 458 wchar_t* wfilename = wfilenamep.get();
459 459 wfilename[wlen] = 0;
460 460 for (unsigned int i = 2; i < len; i += 2) {
... ... @@ -471,9 +471,9 @@ QUtil::safe_fopen(char const* filename, char const* mode)
471 471 {
472 472 FILE* f = 0;
473 473 #ifdef _WIN32
474   - PointerHolder<wchar_t> wfilenamep = win_convert_filename(filename);
  474 + std::shared_ptr<wchar_t> wfilenamep = win_convert_filename(filename);
475 475 wchar_t* wfilename = wfilenamep.get();
476   - PointerHolder<wchar_t> wmodep(true, new wchar_t[strlen(mode) + 1]);
  476 + auto wmodep = QUtil::make_shared_array<wchar_t>(strlen(mode) + 1);
477 477 wchar_t* wmode = wmodep.get();
478 478 wmode[strlen(mode)] = 0;
479 479 for (size_t i = 0; i < strlen(mode); ++i) {
... ... @@ -612,7 +612,7 @@ void
612 612 QUtil::remove_file(char const* path)
613 613 {
614 614 #ifdef _WIN32
615   - PointerHolder<wchar_t> wpath = win_convert_filename(path);
  615 + std::shared_ptr<wchar_t> wpath = win_convert_filename(path);
616 616 os_wrapper(std::string("remove ") + path, _wunlink(wpath.get()));
617 617 #else
618 618 os_wrapper(std::string("remove ") + path, unlink(path));
... ... @@ -628,8 +628,8 @@ QUtil::rename_file(char const* oldname, char const* newname)
628 628 } catch (QPDFSystemError&) {
629 629 // ignore
630 630 }
631   - PointerHolder<wchar_t> wold = win_convert_filename(oldname);
632   - PointerHolder<wchar_t> wnew = win_convert_filename(newname);
  631 + std::shared_ptr<wchar_t> wold = win_convert_filename(oldname);
  632 + std::shared_ptr<wchar_t> wnew = win_convert_filename(newname);
633 633 os_wrapper(
634 634 std::string("rename ") + oldname + " " + newname,
635 635 _wrename(wold.get(), wnew.get()));
... ... @@ -824,7 +824,7 @@ QUtil::get_env(std::string const&amp; var, std::string* value)
824 824 }
825 825  
826 826 if (value) {
827   - PointerHolder<char> t = PointerHolder<char>(true, new char[len + 1]);
  827 + auto t = QUtil::make_shared_array<char>(len + 1);
828 828 ::GetEnvironmentVariable(var.c_str(), t.get(), len);
829 829 *value = t.get();
830 830 }
... ... @@ -1173,14 +1173,14 @@ QUtil::is_number(char const* p)
1173 1173  
1174 1174 void
1175 1175 QUtil::read_file_into_memory(
1176   - char const* filename, PointerHolder<char>& file_buf, size_t& size)
  1176 + char const* filename, std::shared_ptr<char>& file_buf, size_t& size)
1177 1177 {
1178 1178 FILE* f = safe_fopen(filename, "rb");
1179 1179 FileCloser fc(f);
1180 1180 fseek(f, 0, SEEK_END);
1181 1181 size = QIntC::to_size(QUtil::tell(f));
1182 1182 fseek(f, 0, SEEK_SET);
1183   - file_buf = make_array_pointer_holder<char>(size);
  1183 + file_buf = QUtil::make_shared_array<char>(size);
1184 1184 char* buf_p = file_buf.get();
1185 1185 size_t bytes_read = 0;
1186 1186 size_t len = 0;
... ...
libqpdf/qpdf-c.cc
... ... @@ -18,7 +18,7 @@
18 18  
19 19 struct _qpdf_error
20 20 {
21   - PointerHolder<QPDFExc> exc;
  21 + std::shared_ptr<QPDFExc> exc;
22 22 };
23 23  
24 24 struct _qpdf_data
... ... @@ -26,10 +26,10 @@ struct _qpdf_data
26 26 _qpdf_data();
27 27 ~_qpdf_data();
28 28  
29   - PointerHolder<QPDF> qpdf;
30   - PointerHolder<QPDFWriter> qpdf_writer;
  29 + std::shared_ptr<QPDF> qpdf;
  30 + std::shared_ptr<QPDFWriter> qpdf_writer;
31 31  
32   - PointerHolder<QPDFExc> error;
  32 + std::shared_ptr<QPDFExc> error;
33 33 _qpdf_error tmp_error;
34 34 std::list<QPDFExc> warnings;
35 35 std::string tmp_string;
... ... @@ -40,12 +40,12 @@ struct _qpdf_data
40 40 unsigned long long size;
41 41 char const* password;
42 42 bool write_memory;
43   - PointerHolder<Buffer> output_buffer;
  43 + std::shared_ptr<Buffer> output_buffer;
44 44  
45 45 // QPDFObjectHandle support
46 46 bool silence_errors;
47 47 bool oh_error_occurred;
48   - std::map<qpdf_oh, PointerHolder<QPDFObjectHandle>> oh_cache;
  48 + std::map<qpdf_oh, std::shared_ptr<QPDFObjectHandle>> oh_cache;
49 49 qpdf_oh next_oh;
50 50 std::set<std::string> cur_iter_dict_keys;
51 51 std::set<std::string>::const_iterator dict_iter;
... ... @@ -111,13 +111,13 @@ static void
111 111 call_init_write(qpdf_data qpdf)
112 112 {
113 113 qpdf->qpdf_writer =
114   - make_pointer_holder<QPDFWriter>(*(qpdf->qpdf), qpdf->filename);
  114 + std::make_shared<QPDFWriter>(*(qpdf->qpdf), qpdf->filename);
115 115 }
116 116  
117 117 static void
118 118 call_init_write_memory(qpdf_data qpdf)
119 119 {
120   - qpdf->qpdf_writer = make_pointer_holder<QPDFWriter>(*(qpdf->qpdf));
  120 + qpdf->qpdf_writer = std::make_shared<QPDFWriter>(*(qpdf->qpdf));
121 121 qpdf->qpdf_writer->setOutputMemory();
122 122 }
123 123  
... ... @@ -144,15 +144,15 @@ trap_errors(qpdf_data qpdf, std::function&lt;void(qpdf_data)&gt; fn)
144 144 try {
145 145 fn(qpdf);
146 146 } catch (QPDFExc& e) {
147   - qpdf->error = make_pointer_holder<QPDFExc>(e);
  147 + qpdf->error = std::make_shared<QPDFExc>(e);
148 148 status |= QPDF_ERRORS;
149 149 } catch (std::runtime_error& e) {
150 150 qpdf->error =
151   - make_pointer_holder<QPDFExc>(qpdf_e_system, "", "", 0, e.what());
  151 + std::make_shared<QPDFExc>(qpdf_e_system, "", "", 0, e.what());
152 152 status |= QPDF_ERRORS;
153 153 } catch (std::exception& e) {
154 154 qpdf->error =
155   - make_pointer_holder<QPDFExc>(qpdf_e_internal, "", "", 0, e.what());
  155 + std::make_shared<QPDFExc>(qpdf_e_internal, "", "", 0, e.what());
156 156 status |= QPDF_ERRORS;
157 157 }
158 158  
... ... @@ -175,7 +175,7 @@ qpdf_init()
175 175 {
176 176 QTC::TC("qpdf", "qpdf-c called qpdf_init");
177 177 qpdf_data qpdf = new _qpdf_data();
178   - qpdf->qpdf = make_pointer_holder<QPDF>();
  178 + qpdf->qpdf = std::make_shared<QPDF>();
179 179 return qpdf;
180 180 }
181 181  
... ... @@ -241,8 +241,7 @@ qpdf_error
241 241 qpdf_next_warning(qpdf_data qpdf)
242 242 {
243 243 if (qpdf_more_warnings(qpdf)) {
244   - qpdf->tmp_error.exc =
245   - make_pointer_holder<QPDFExc>(qpdf->warnings.front());
  244 + qpdf->tmp_error.exc = std::make_shared<QPDFExc>(qpdf->warnings.front());
246 245 qpdf->warnings.pop_front();
247 246 QTC::TC("qpdf", "qpdf-c qpdf_next_warning returned warning");
248 247 return &qpdf->tmp_error;
... ... @@ -974,7 +973,7 @@ qpdf_register_progress_reporter(
974 973 {
975 974 QTC::TC("qpdf", "qpdf-c registered progress reporter");
976 975 qpdf->qpdf_writer->registerProgressReporter(
977   - PointerHolder<QPDFWriter::ProgressReporter>(
  976 + std::shared_ptr<QPDFWriter::ProgressReporter>(
978 977 new ProgressReporter(report_progress, data)));
979 978 }
980 979  
... ... @@ -1035,7 +1034,7 @@ static qpdf_oh
1035 1034 new_object(qpdf_data qpdf, QPDFObjectHandle const& qoh)
1036 1035 {
1037 1036 qpdf_oh oh = ++qpdf->next_oh; // never return 0
1038   - qpdf->oh_cache[oh] = make_pointer_holder<QPDFObjectHandle>(qoh);
  1037 + qpdf->oh_cache[oh] = std::make_shared<QPDFObjectHandle>(qoh);
1039 1038 return oh;
1040 1039 }
1041 1040  
... ...
libqpdf/qpdf/JSONHandler.hh
... ... @@ -125,7 +125,7 @@ class JSONHandler
125 125  
126 126 Handlers h;
127 127 };
128   - PointerHolder<Members> m;
  128 + std::shared_ptr<Members> m;
129 129 };
130 130  
131 131 #endif // JSONHANDLER_HH
... ...
libqpdf/qpdf/OffsetInputSource.hh
... ... @@ -10,7 +10,8 @@
10 10 class OffsetInputSource: public InputSource
11 11 {
12 12 public:
13   - OffsetInputSource(PointerHolder<InputSource>, qpdf_offset_t global_offset);
  13 + OffsetInputSource(
  14 + std::shared_ptr<InputSource>, qpdf_offset_t global_offset);
14 15 virtual ~OffsetInputSource();
15 16  
16 17 virtual qpdf_offset_t findAndSkipNextEOL();
... ... @@ -22,7 +23,7 @@ class OffsetInputSource: public InputSource
22 23 virtual void unreadCh(char ch);
23 24  
24 25 private:
25   - PointerHolder<InputSource> proxied;
  26 + std::shared_ptr<InputSource> proxied;
26 27 qpdf_offset_t global_offset;
27 28 qpdf_offset_t max_safe_offset;
28 29 };
... ...
libqpdf/qpdf/Pl_PNGFilter.hh
... ... @@ -46,8 +46,8 @@ class Pl_PNGFilter: public Pipeline
46 46 unsigned int bytes_per_pixel;
47 47 unsigned char* cur_row; // points to buf1 or buf2
48 48 unsigned char* prev_row; // points to buf1 or buf2
49   - PointerHolder<unsigned char> buf1;
50   - PointerHolder<unsigned char> buf2;
  49 + std::shared_ptr<unsigned char> buf1;
  50 + std::shared_ptr<unsigned char> buf2;
51 51 size_t pos;
52 52 size_t incoming;
53 53 };
... ...
libqpdf/qpdf/Pl_RC4.hh
... ... @@ -27,7 +27,7 @@ class Pl_RC4: public Pipeline
27 27 virtual void finish();
28 28  
29 29 private:
30   - PointerHolder<unsigned char> outbuf;
  30 + std::shared_ptr<unsigned char> outbuf;
31 31 size_t out_bufsize;
32 32 RC4 rc4;
33 33 };
... ...
libqpdf/qpdf/Pl_TIFFPredictor.hh
... ... @@ -35,7 +35,7 @@ class Pl_TIFFPredictor: public Pipeline
35 35 unsigned int bytes_per_row;
36 36 unsigned int samples_per_pixel;
37 37 unsigned int bits_per_sample;
38   - PointerHolder<unsigned char> cur_row;
  38 + std::shared_ptr<unsigned char> cur_row;
39 39 size_t pos;
40 40 };
41 41  
... ...
libqpdf/qpdf/QPDF_Stream.hh
... ... @@ -37,8 +37,8 @@ class QPDF_Stream: public QPDFObject
37 37 // Methods to help QPDF copy foreign streams
38 38 qpdf_offset_t getOffset() const;
39 39 size_t getLength() const;
40   - PointerHolder<Buffer> getStreamDataBuffer() const;
41   - PointerHolder<QPDFObjectHandle::StreamDataProvider>
  40 + std::shared_ptr<Buffer> getStreamDataBuffer() const;
  41 + std::shared_ptr<QPDFObjectHandle::StreamDataProvider>
42 42 getStreamDataProvider() const;
43 43  
44 44 // See comments in QPDFObjectHandle.hh for these methods.
... ... @@ -49,18 +49,18 @@ class QPDF_Stream: public QPDFObject
49 49 qpdf_stream_decode_level_e decode_level,
50 50 bool suppress_warnings,
51 51 bool will_retry);
52   - PointerHolder<Buffer> getStreamData(qpdf_stream_decode_level_e);
53   - PointerHolder<Buffer> getRawStreamData();
  52 + std::shared_ptr<Buffer> getStreamData(qpdf_stream_decode_level_e);
  53 + std::shared_ptr<Buffer> getRawStreamData();
54 54 void replaceStreamData(
55   - PointerHolder<Buffer> data,
  55 + std::shared_ptr<Buffer> data,
56 56 QPDFObjectHandle const& filter,
57 57 QPDFObjectHandle const& decode_parms);
58 58 void replaceStreamData(
59   - PointerHolder<QPDFObjectHandle::StreamDataProvider> provider,
  59 + std::shared_ptr<QPDFObjectHandle::StreamDataProvider> provider,
60 60 QPDFObjectHandle const& filter,
61 61 QPDFObjectHandle const& decode_parms);
62 62 void
63   - addTokenFilter(PointerHolder<QPDFObjectHandle::TokenFilter> token_filter);
  63 + addTokenFilter(std::shared_ptr<QPDFObjectHandle::TokenFilter> token_filter);
64 64  
65 65 void replaceDict(QPDFObjectHandle new_dict);
66 66  
... ... @@ -101,9 +101,9 @@ class QPDF_Stream: public QPDFObject
101 101 QPDFObjectHandle stream_dict;
102 102 qpdf_offset_t offset;
103 103 size_t length;
104   - PointerHolder<Buffer> stream_data;
105   - PointerHolder<QPDFObjectHandle::StreamDataProvider> stream_provider;
106   - std::vector<PointerHolder<QPDFObjectHandle::TokenFilter>> token_filters;
  104 + std::shared_ptr<Buffer> stream_data;
  105 + std::shared_ptr<QPDFObjectHandle::StreamDataProvider> stream_provider;
  106 + std::vector<std::shared_ptr<QPDFObjectHandle::TokenFilter>> token_filters;
107 107 };
108 108  
109 109 #endif // QPDF_STREAM_HH
... ...