2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-05-29 00:10:54 +00:00

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
This commit is contained in:
Jay Berkenbilt 2022-04-09 14:35:56 -04:00
parent ae819b5318
commit a68703b07e
68 changed files with 283 additions and 278 deletions

View File

@ -75,7 +75,7 @@ class Buffer
void copy(Buffer const&); void copy(Buffer const&);
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // BUFFER_HH #endif // BUFFER_HH

View File

@ -73,7 +73,7 @@ class BufferInputSource: public InputSource
qpdf_offset_t max_offset; qpdf_offset_t max_offset;
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // QPDF_BUFFERINPUTSOURCE_HH #endif // QPDF_BUFFERINPUTSOURCE_HH

View File

@ -84,10 +84,10 @@ class ClosedFileInputSource: public InputSource
std::string filename; std::string filename;
qpdf_offset_t offset; qpdf_offset_t offset;
PointerHolder<FileInputSource> fis; std::shared_ptr<FileInputSource> fis;
bool stay_open; bool stay_open;
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // QPDF_CLOSEDFILEINPUTSOURCE_HH #endif // QPDF_CLOSEDFILEINPUTSOURCE_HH

View File

@ -71,7 +71,7 @@ class FileInputSource: public InputSource
FILE* file; FILE* file;
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // QPDF_FILEINPUTSOURCE_HH #endif // QPDF_FILEINPUTSOURCE_HH

View File

@ -114,7 +114,7 @@ class QPDF_DLL_CLASS InputSource
Members(Members const&); Members(Members const&);
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // QPDF_INPUTSOURCE_HH #endif // QPDF_INPUTSOURCE_HH

View File

@ -219,7 +219,7 @@ class JSON
std::shared_ptr<JSON_value> value; std::shared_ptr<JSON_value> value;
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // JSON_HH #endif // JSON_HH

View File

@ -59,7 +59,7 @@ class Pl_Buffer: public Pipeline
// Same as getBuffer but wraps the result in a shared pointer. // Same as getBuffer but wraps the result in a shared pointer.
QPDF_DLL QPDF_DLL
PointerHolder<Buffer> getBufferSharedPointer(); std::shared_ptr<Buffer> getBufferSharedPointer();
// getMallocBuffer behaves in the same was as getBuffer except the // getMallocBuffer behaves in the same was as getBuffer except the
// buffer is allocated with malloc(), making it suitable for use // buffer is allocated with malloc(), making it suitable for use
@ -84,11 +84,11 @@ class Pl_Buffer: public Pipeline
Members(Members const&); Members(Members const&);
bool ready; bool ready;
PointerHolder<Buffer> data; std::shared_ptr<Buffer> data;
size_t total_size; size_t total_size;
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // PL_BUFFER_HH #endif // PL_BUFFER_HH

View File

@ -63,7 +63,7 @@ class Pl_Concatenate: public Pipeline
Members(Members const&); Members(Members const&);
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // PL_CONCATENATE_HH #endif // PL_CONCATENATE_HH

View File

@ -66,7 +66,7 @@ class Pl_Count: public Pipeline
unsigned char last_char; unsigned char last_char;
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // PL_COUNT_HH #endif // PL_COUNT_HH

View File

@ -106,7 +106,7 @@ class Pl_DCT: public Pipeline
CompressConfig* config_callback; CompressConfig* config_callback;
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // PL_DCT_HH #endif // PL_DCT_HH

View File

@ -56,7 +56,7 @@ class Pl_Discard: public Pipeline
Members(Members const&); Members(Members const&);
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // PL_DISCARD_HH #endif // PL_DISCARD_HH

View File

@ -85,7 +85,7 @@ class Pl_Flate: public Pipeline
std::function<void(char const*, int)> callback; std::function<void(char const*, int)> callback;
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // PL_FLATE_HH #endif // PL_FLATE_HH

View File

@ -76,7 +76,7 @@ class Pl_QPDFTokenizer: public Pipeline
QPDFTokenizer tokenizer; QPDFTokenizer tokenizer;
Pl_Buffer buf; Pl_Buffer buf;
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // PL_QPDFTOKENIZER_HH #endif // PL_QPDFTOKENIZER_HH

View File

@ -64,7 +64,7 @@ class Pl_RunLength: public Pipeline
unsigned int length; unsigned int length;
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // PL_RUNLENGTH_HH #endif // PL_RUNLENGTH_HH

View File

@ -63,7 +63,7 @@ class Pl_StdioFile: public Pipeline
FILE* file; FILE* file;
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // PL_STDIOFILE_HH #endif // PL_STDIOFILE_HH

View File

@ -108,7 +108,7 @@ class QPDF
// InputSource and use this method. // InputSource and use this method.
QPDF_DLL QPDF_DLL
void void
processInputSource(PointerHolder<InputSource>, char const* password = 0); processInputSource(std::shared_ptr<InputSource>, char const* password = 0);
// Close or otherwise release the input source. Once this has been // Close or otherwise release the input source. Once this has been
// called, no other methods of qpdf can be called safely except // called, no other methods of qpdf can be called safely except
@ -714,7 +714,7 @@ class QPDF
std::map<int, QPDFXRefEntry> const& xref, std::map<int, QPDFXRefEntry> const& xref,
std::map<int, qpdf_offset_t> const& lengths, std::map<int, qpdf_offset_t> const& lengths,
std::map<int, int> const& obj_renumber, std::map<int, int> const& obj_renumber,
PointerHolder<Buffer>& hint_stream, std::shared_ptr<Buffer>& hint_stream,
int& S, int& S,
int& O) int& O)
{ {
@ -742,14 +742,14 @@ class QPDF
friend class QPDFObjectHandle; friend class QPDFObjectHandle;
private: private:
static PointerHolder<QPDFObject> static std::shared_ptr<QPDFObject>
resolve(QPDF* qpdf, int objid, int generation) resolve(QPDF* qpdf, int objid, int generation)
{ {
return qpdf->resolve(objid, generation); return qpdf->resolve(objid, generation);
} }
static bool static bool
objectChanged( objectChanged(
QPDF* qpdf, QPDFObjGen const& og, PointerHolder<QPDFObject>& oph) QPDF* qpdf, QPDFObjGen const& og, std::shared_ptr<QPDFObject>& oph)
{ {
return qpdf->objectChanged(og, oph); return qpdf->objectChanged(og, oph);
} }
@ -841,7 +841,7 @@ class QPDF
{ {
} }
ObjCache( ObjCache(
PointerHolder<QPDFObject> object, std::shared_ptr<QPDFObject> object,
qpdf_offset_t end_before_space, qpdf_offset_t end_before_space,
qpdf_offset_t end_after_space) : qpdf_offset_t end_after_space) :
object(object), object(object),
@ -850,7 +850,7 @@ class QPDF
{ {
} }
PointerHolder<QPDFObject> object; std::shared_ptr<QPDFObject> object;
qpdf_offset_t end_before_space; qpdf_offset_t end_before_space;
qpdf_offset_t end_after_space; qpdf_offset_t end_after_space;
}; };
@ -896,8 +896,8 @@ class QPDF
public: public:
ForeignStreamData( ForeignStreamData(
PointerHolder<EncryptionParameters> encp, std::shared_ptr<EncryptionParameters> encp,
PointerHolder<InputSource> file, std::shared_ptr<InputSource> file,
int foreign_objid, int foreign_objid,
int foreign_generation, int foreign_generation,
qpdf_offset_t offset, qpdf_offset_t offset,
@ -905,8 +905,8 @@ class QPDF
QPDFObjectHandle local_dict); QPDFObjectHandle local_dict);
private: private:
PointerHolder<EncryptionParameters> encp; std::shared_ptr<EncryptionParameters> encp;
PointerHolder<InputSource> file; std::shared_ptr<InputSource> file;
int foreign_objid; int foreign_objid;
int foreign_generation; int foreign_generation;
qpdf_offset_t offset; qpdf_offset_t offset;
@ -930,12 +930,12 @@ class QPDF
void registerForeignStream( void registerForeignStream(
QPDFObjGen const& local_og, QPDFObjectHandle foreign_stream); QPDFObjGen const& local_og, QPDFObjectHandle foreign_stream);
void registerForeignStream( void registerForeignStream(
QPDFObjGen const& local_og, PointerHolder<ForeignStreamData>); QPDFObjGen const& local_og, std::shared_ptr<ForeignStreamData>);
private: private:
QPDF& destination_qpdf; QPDF& destination_qpdf;
std::map<QPDFObjGen, QPDFObjectHandle> foreign_streams; std::map<QPDFObjGen, QPDFObjectHandle> foreign_streams;
std::map<QPDFObjGen, PointerHolder<ForeignStreamData>> std::map<QPDFObjGen, std::shared_ptr<ForeignStreamData>>
foreign_stream_data; foreign_stream_data;
}; };
@ -994,18 +994,18 @@ class QPDF
void setLastObjectDescription( void setLastObjectDescription(
std::string const& description, int objid, int generation); std::string const& description, int objid, int generation);
QPDFObjectHandle readObject( QPDFObjectHandle readObject(
PointerHolder<InputSource>, std::shared_ptr<InputSource>,
std::string const& description, std::string const& description,
int objid, int objid,
int generation, int generation,
bool in_object_stream); bool in_object_stream);
size_t recoverStreamLength( size_t recoverStreamLength(
PointerHolder<InputSource> input, std::shared_ptr<InputSource> input,
int objid, int objid,
int generation, int generation,
qpdf_offset_t stream_offset); qpdf_offset_t stream_offset);
QPDFTokenizer::Token QPDFTokenizer::Token
readToken(PointerHolder<InputSource>, size_t max_len = 0); readToken(std::shared_ptr<InputSource>, size_t max_len = 0);
QPDFObjectHandle readObjectAtOffset( QPDFObjectHandle readObjectAtOffset(
bool attempt_recovery, bool attempt_recovery,
@ -1015,8 +1015,8 @@ class QPDF
int exp_generation, int exp_generation,
int& act_objid, int& act_objid,
int& act_generation); int& act_generation);
bool objectChanged(QPDFObjGen const& og, PointerHolder<QPDFObject>& oph); bool objectChanged(QPDFObjGen const& og, std::shared_ptr<QPDFObject>& oph);
PointerHolder<QPDFObject> resolve(int objid, int generation); std::shared_ptr<QPDFObject> resolve(int objid, int generation);
void resolveObjectsInStream(int obj_stream_number); void resolveObjectsInStream(int obj_stream_number);
void stopOnError(std::string const& message); void stopOnError(std::string const& message);
@ -1031,13 +1031,13 @@ class QPDF
bool suppress_warnings, bool suppress_warnings,
bool will_retry); bool will_retry);
bool pipeForeignStreamData( bool pipeForeignStreamData(
PointerHolder<ForeignStreamData>, std::shared_ptr<ForeignStreamData>,
Pipeline*, Pipeline*,
bool suppress_warnings, bool suppress_warnings,
bool will_retry); bool will_retry);
static bool pipeStreamData( static bool pipeStreamData(
PointerHolder<QPDF::EncryptionParameters> encp, std::shared_ptr<QPDF::EncryptionParameters> encp,
PointerHolder<InputSource> file, std::shared_ptr<InputSource> file,
QPDF& qpdf_for_warning, QPDF& qpdf_for_warning,
int objid, int objid,
int generation, int generation,
@ -1064,7 +1064,7 @@ class QPDF
std::map<int, QPDFXRefEntry> const& xref, std::map<int, QPDFXRefEntry> const& xref,
std::map<int, qpdf_offset_t> const& lengths, std::map<int, qpdf_offset_t> const& lengths,
std::map<int, int> const& obj_renumber, std::map<int, int> const& obj_renumber,
PointerHolder<Buffer>& hint_stream, std::shared_ptr<Buffer>& hint_stream,
int& S, int& S,
int& O); int& O);
@ -1089,10 +1089,10 @@ class QPDF
// methods to support encryption -- implemented in QPDF_encryption.cc // methods to support encryption -- implemented in QPDF_encryption.cc
static encryption_method_e static encryption_method_e
interpretCF(PointerHolder<EncryptionParameters> encp, QPDFObjectHandle); interpretCF(std::shared_ptr<EncryptionParameters> encp, QPDFObjectHandle);
void initializeEncryption(); void initializeEncryption();
static std::string getKeyForObject( static std::string getKeyForObject(
PointerHolder<EncryptionParameters> encp, std::shared_ptr<EncryptionParameters> encp,
int objid, int objid,
int generation, int generation,
bool use_aes); bool use_aes);
@ -1106,8 +1106,8 @@ class QPDF
EncryptionData const& data, EncryptionData const& data,
bool& perms_valid); bool& perms_valid);
static void decryptStream( static void decryptStream(
PointerHolder<EncryptionParameters> encp, std::shared_ptr<EncryptionParameters> encp,
PointerHolder<InputSource> file, std::shared_ptr<InputSource> file,
QPDF& qpdf_for_warning, QPDF& qpdf_for_warning,
Pipeline*& pipeline, Pipeline*& pipeline,
int objid, int objid,
@ -1522,7 +1522,7 @@ class QPDF
unsigned long long unique_id; unsigned long long unique_id;
QPDFTokenizer tokenizer; QPDFTokenizer tokenizer;
PointerHolder<InputSource> file; std::shared_ptr<InputSource> file;
std::string last_object_description; std::string last_object_description;
bool provided_password_is_hex_key; bool provided_password_is_hex_key;
bool ignore_xref_streams; bool ignore_xref_streams;
@ -1530,7 +1530,7 @@ class QPDF
std::ostream* out_stream; std::ostream* out_stream;
std::ostream* err_stream; std::ostream* err_stream;
bool attempt_recovery; bool attempt_recovery;
PointerHolder<EncryptionParameters> encp; std::shared_ptr<EncryptionParameters> encp;
std::string pdf_version; std::string pdf_version;
std::map<QPDFObjGen, QPDFXRefEntry> xref_table; std::map<QPDFObjGen, QPDFXRefEntry> xref_table;
std::set<int> deleted_objects; std::set<int> deleted_objects;
@ -1542,7 +1542,7 @@ class QPDF
bool pushed_inherited_attributes_to_pages; bool pushed_inherited_attributes_to_pages;
std::vector<QPDFExc> warnings; std::vector<QPDFExc> warnings;
std::map<unsigned long long, ObjCopier> object_copiers; std::map<unsigned long long, ObjCopier> object_copiers;
PointerHolder<QPDFObjectHandle::StreamDataProvider> copied_streams; std::shared_ptr<QPDFObjectHandle::StreamDataProvider> copied_streams;
// copied_stream_data_provider is owned by copied_streams // copied_stream_data_provider is owned by copied_streams
CopiedStreamDataProvider* copied_stream_data_provider; CopiedStreamDataProvider* copied_stream_data_provider;
bool reconstructed_xref; bool reconstructed_xref;
@ -1590,7 +1590,7 @@ class QPDF
// Keep all member variables inside the Members object, which we // Keep all member variables inside the Members object, which we
// dynamically allocate. This makes it possible to add new private // dynamically allocate. This makes it possible to add new private
// members without breaking binary compatibility. // members without breaking binary compatibility.
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // QPDF_HH #endif // QPDF_HH

View File

@ -305,7 +305,7 @@ class QPDFAcroFormDocumentHelper: public QPDFDocumentHelper
std::map<std::string, std::set<QPDFObjGen>> name_to_fields; std::map<std::string, std::set<QPDFObjGen>> name_to_fields;
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // QPDFACROFORMDOCUMENTHELPER_HH #endif // QPDFACROFORMDOCUMENTHELPER_HH

View File

@ -115,7 +115,7 @@ class QPDFAnnotationObjectHelper: public QPDFObjectHelper
Members(Members const&); Members(Members const&);
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // QPDFANNOTATIONOBJECTHELPER_HH #endif // QPDFANNOTATIONOBJECTHELPER_HH

View File

@ -74,7 +74,7 @@ class QPDFEFStreamObjectHelper: public QPDFObjectHelper
// parameters may be supplied using setters defined below. // parameters may be supplied using setters defined below.
QPDF_DLL QPDF_DLL
static QPDFEFStreamObjectHelper static QPDFEFStreamObjectHelper
createEFStream(QPDF& qpdf, PointerHolder<Buffer> data); createEFStream(QPDF& qpdf, std::shared_ptr<Buffer> data);
QPDF_DLL QPDF_DLL
static QPDFEFStreamObjectHelper static QPDFEFStreamObjectHelper
createEFStream(QPDF& qpdf, std::string const& data); createEFStream(QPDF& qpdf, std::string const& data);
@ -116,7 +116,7 @@ class QPDFEFStreamObjectHelper: public QPDFObjectHelper
Members(Members const&) = delete; Members(Members const&) = delete;
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // QPDFEFSTREAMOBJECTHELPER_HH #endif // QPDFEFSTREAMOBJECTHELPER_HH

View File

@ -91,7 +91,7 @@ class QPDFEmbeddedFileDocumentHelper: public QPDFDocumentHelper
std::shared_ptr<QPDFNameTreeObjectHelper> embedded_files; std::shared_ptr<QPDFNameTreeObjectHelper> embedded_files;
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // QPDFEMBEDDEDFILEDOCUMENTHELPER_HH #endif // QPDFEMBEDDEDFILEDOCUMENTHELPER_HH

View File

@ -113,7 +113,7 @@ class QPDFFileSpecObjectHelper: public QPDFObjectHelper
Members(Members const&) = delete; Members(Members const&) = delete;
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // QPDFFILESPECOBJECTHELPER_HH #endif // QPDFFILESPECOBJECTHELPER_HH

View File

@ -236,7 +236,7 @@ class QPDFFormFieldObjectHelper: public QPDFObjectHelper
Members(Members const&); Members(Members const&);
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // QPDFFORMFIELDOBJECTHELPER_HH #endif // QPDFFORMFIELDOBJECTHELPER_HH

View File

@ -453,7 +453,7 @@ class QPDFJob
std::shared_ptr<QPDF> processFile( std::shared_ptr<QPDF> processFile(
char const* filename, char const* password, bool used_for_input); char const* filename, char const* password, bool used_for_input);
std::shared_ptr<QPDF> processInputSource( std::shared_ptr<QPDF> processInputSource(
PointerHolder<InputSource> is, std::shared_ptr<InputSource> is,
char const* password, char const* password,
bool used_for_input); bool used_for_input);
std::shared_ptr<QPDF> doProcess( std::shared_ptr<QPDF> doProcess(

View File

@ -204,7 +204,7 @@ class QPDFNameTreeObjectHelper: public QPDFObjectHelper
std::shared_ptr<NNTreeImpl> impl; std::shared_ptr<NNTreeImpl> impl;
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // QPDFNAMETREEOBJECTHELPER_HH #endif // QPDFNAMETREEOBJECTHELPER_HH

View File

@ -226,7 +226,7 @@ class QPDFNumberTreeObjectHelper: public QPDFObjectHelper
std::shared_ptr<NNTreeImpl> impl; std::shared_ptr<NNTreeImpl> impl;
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // QPDFNUMBERTREEOBJECTHELPER_HH #endif // QPDFNUMBERTREEOBJECTHELPER_HH

View File

@ -434,7 +434,7 @@ class QPDFObjectHandle
// objects that are ready from the object's input stream. // objects that are ready from the object's input stream.
QPDF_DLL QPDF_DLL
static QPDFObjectHandle parse( static QPDFObjectHandle parse(
PointerHolder<InputSource> input, std::shared_ptr<InputSource> input,
std::string const& object_description, std::string const& object_description,
QPDFTokenizer&, QPDFTokenizer&,
bool& empty, bool& empty,
@ -490,7 +490,7 @@ class QPDFObjectHandle
// handle the case of pages whose contents are split across // handle the case of pages whose contents are split across
// multiple streams. // multiple streams.
QPDF_DLL QPDF_DLL
void addTokenFilter(PointerHolder<TokenFilter> token_filter); void addTokenFilter(std::shared_ptr<TokenFilter> token_filter);
// Legacy helpers for parsing content streams. These methods are // Legacy helpers for parsing content streams. These methods are
// not going away, but newer code should call the correspond // not going away, but newer code should call the correspond
@ -506,7 +506,7 @@ class QPDFObjectHandle
QPDF_DLL QPDF_DLL
void pipePageContents(Pipeline* p); void pipePageContents(Pipeline* p);
QPDF_DLL QPDF_DLL
void addContentTokenFilter(PointerHolder<TokenFilter> token_filter); void addContentTokenFilter(std::shared_ptr<TokenFilter> token_filter);
// End legacy content stream helpers // End legacy content stream helpers
// Called on a stream to filter the stream as if it were page // Called on a stream to filter the stream as if it were page
@ -618,11 +618,11 @@ class QPDFObjectHandle
// uncompressed stream data. Example programs are provided that // uncompressed stream data. Example programs are provided that
// illustrate this. // illustrate this.
QPDF_DLL QPDF_DLL
static QPDFObjectHandle newStream(QPDF* qpdf, PointerHolder<Buffer> data); static QPDFObjectHandle newStream(QPDF* qpdf, std::shared_ptr<Buffer> data);
// Create new stream with data from string. This method will // Create new stream with data from string. This method will
// create a copy of the data rather than using the user-provided // create a copy of the data rather than using the user-provided
// buffer as in the PointerHolder<Buffer> version of newStream. // buffer as in the std::shared_ptr<Buffer> version of newStream.
QPDF_DLL QPDF_DLL
static QPDFObjectHandle newStream(QPDF* qpdf, std::string const& data); static QPDFObjectHandle newStream(QPDF* qpdf, std::string const& data);
@ -1089,12 +1089,12 @@ class QPDFObjectHandle
// Returns filtered (uncompressed) stream data. Throws an // Returns filtered (uncompressed) stream data. Throws an
// exception if the stream is filtered and we can't decode it. // exception if the stream is filtered and we can't decode it.
QPDF_DLL QPDF_DLL
PointerHolder<Buffer> std::shared_ptr<Buffer>
getStreamData(qpdf_stream_decode_level_e level = qpdf_dl_generalized); getStreamData(qpdf_stream_decode_level_e level = qpdf_dl_generalized);
// Returns unfiltered (raw) stream data. // Returns unfiltered (raw) stream data.
QPDF_DLL QPDF_DLL
PointerHolder<Buffer> getRawStreamData(); std::shared_ptr<Buffer> getRawStreamData();
// Write stream data through the given pipeline. A null pipeline // Write stream data through the given pipeline. A null pipeline
// value may be used if all you want to do is determine whether a // value may be used if all you want to do is determine whether a
@ -1201,13 +1201,13 @@ class QPDFObjectHandle
// decryption filters have been applied, is as presented. // decryption filters have been applied, is as presented.
QPDF_DLL QPDF_DLL
void replaceStreamData( void replaceStreamData(
PointerHolder<Buffer> data, std::shared_ptr<Buffer> data,
QPDFObjectHandle const& filter, QPDFObjectHandle const& filter,
QPDFObjectHandle const& decode_parms); QPDFObjectHandle const& decode_parms);
// Replace the stream's stream data with the given string. // Replace the stream's stream data with the given string.
// This method will create a copy of the data rather than using // This method will create a copy of the data rather than using
// the user-provided buffer as in the PointerHolder<Buffer> version // the user-provided buffer as in the std::shared_ptr<Buffer> version
// of replaceStreamData. // of replaceStreamData.
QPDF_DLL QPDF_DLL
void replaceStreamData( void replaceStreamData(
@ -1242,7 +1242,7 @@ class QPDFObjectHandle
// compute the length in advance. // compute the length in advance.
QPDF_DLL QPDF_DLL
void replaceStreamData( void replaceStreamData(
PointerHolder<StreamDataProvider> provider, std::shared_ptr<StreamDataProvider> provider,
QPDFObjectHandle const& filter, QPDFObjectHandle const& filter,
QPDFObjectHandle const& decode_parms); QPDFObjectHandle const& decode_parms);
@ -1373,7 +1373,7 @@ class QPDFObjectHandle
friend class QPDF; friend class QPDF;
private: private:
static PointerHolder<QPDFObject> static std::shared_ptr<QPDFObject>
getObject(QPDFObjectHandle& o) getObject(QPDFObjectHandle& o)
{ {
o.dereference(); o.dereference();
@ -1496,10 +1496,10 @@ class QPDFObjectHandle
QPDFObjectHandle, QPDFObjectHandle,
QPDF*, QPDF*,
std::string const&, std::string const&,
PointerHolder<InputSource>, std::shared_ptr<InputSource>,
qpdf_offset_t); qpdf_offset_t);
static QPDFObjectHandle parseInternal( static QPDFObjectHandle parseInternal(
PointerHolder<InputSource> input, std::shared_ptr<InputSource> input,
std::string const& object_description, std::string const& object_description,
QPDFTokenizer& tokenizer, QPDFTokenizer& tokenizer,
bool& empty, bool& empty,
@ -1510,7 +1510,7 @@ class QPDFObjectHandle
void parseContentStream_internal( void parseContentStream_internal(
std::string const& description, ParserCallbacks* callbacks); std::string const& description, ParserCallbacks* callbacks);
static void parseContentStream_data( static void parseContentStream_data(
PointerHolder<Buffer>, std::shared_ptr<Buffer>,
std::string const& description, std::string const& description,
ParserCallbacks* callbacks, ParserCallbacks* callbacks,
QPDF* context); QPDF* context);
@ -1527,7 +1527,7 @@ class QPDFObjectHandle
QPDF* qpdf; QPDF* qpdf;
int objid; // 0 for direct object int objid; // 0 for direct object
int generation; int generation;
PointerHolder<QPDFObject> obj; std::shared_ptr<QPDFObject> obj;
bool reserved; bool reserved;
}; };
@ -1629,7 +1629,7 @@ class QPDFObjectHandle::QPDFDictItems
std::set<std::string>::iterator iter; std::set<std::string>::iterator iter;
bool is_end; bool is_end;
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
value_type ivalue; value_type ivalue;
}; };
@ -1727,7 +1727,7 @@ class QPDFObjectHandle::QPDFArrayItems
int item_number; int item_number;
bool is_end; bool is_end;
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
value_type ivalue; value_type ivalue;
}; };

View File

@ -97,11 +97,11 @@ class QPDFOutlineDocumentHelper: public QPDFDocumentHelper
std::vector<QPDFOutlineObjectHelper> outlines; std::vector<QPDFOutlineObjectHelper> outlines;
std::set<QPDFObjGen> seen; std::set<QPDFObjGen> seen;
QPDFObjectHandle dest_dict; QPDFObjectHandle dest_dict;
PointerHolder<QPDFNameTreeObjectHelper> names_dest; std::shared_ptr<QPDFNameTreeObjectHelper> names_dest;
std::map<QPDFObjGen, std::vector<QPDFOutlineObjectHelper>> by_page; std::map<QPDFObjGen, std::vector<QPDFOutlineObjectHelper>> by_page;
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // QPDFOUTLINEDOCUMENTHELPER_HH #endif // QPDFOUTLINEDOCUMENTHELPER_HH

View File

@ -51,7 +51,7 @@ class QPDFOutlineObjectHelper: public QPDFObjectHelper
// Return parent pointer. Returns a null pointer if this is a // Return parent pointer. Returns a null pointer if this is a
// top-level outline. // top-level outline.
QPDF_DLL QPDF_DLL
PointerHolder<QPDFOutlineObjectHelper> getParent(); std::shared_ptr<QPDFOutlineObjectHelper> getParent();
// Return children as a list. // Return children as a list.
QPDF_DLL QPDF_DLL
@ -112,11 +112,11 @@ class QPDFOutlineObjectHelper: public QPDFObjectHelper
Members(Members const&); Members(Members const&);
QPDFOutlineDocumentHelper& dh; QPDFOutlineDocumentHelper& dh;
PointerHolder<QPDFOutlineObjectHelper> parent; std::shared_ptr<QPDFOutlineObjectHelper> parent;
std::vector<QPDFOutlineObjectHelper> kids; std::vector<QPDFOutlineObjectHelper> kids;
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // QPDFOUTLINEOBJECTHELPER_HH #endif // QPDFOUTLINEOBJECTHELPER_HH

View File

@ -151,7 +151,7 @@ class QPDFPageDocumentHelper: public QPDFDocumentHelper
Members(Members const&); Members(Members const&);
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // QPDFPAGEDOCUMENTHELPER_HH #endif // QPDFPAGEDOCUMENTHELPER_HH

View File

@ -96,10 +96,10 @@ class QPDFPageLabelDocumentHelper: public QPDFDocumentHelper
Members(); Members();
Members(Members const&); Members(Members const&);
PointerHolder<QPDFNumberTreeObjectHelper> labels; std::shared_ptr<QPDFNumberTreeObjectHelper> labels;
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // QPDFPAGELABELDOCUMENTHELPER_HH #endif // QPDFPAGELABELDOCUMENTHELPER_HH

View File

@ -225,7 +225,7 @@ class QPDFPageObjectHelper: public QPDFObjectHelper
// stream. Also works on form XObjects. // stream. Also works on form XObjects.
QPDF_DLL QPDF_DLL
void addContentTokenFilter( void addContentTokenFilter(
PointerHolder<QPDFObjectHandle::TokenFilter> token_filter); std::shared_ptr<QPDFObjectHandle::TokenFilter> token_filter);
// A page's resources dictionary maps names to objects elsewhere // A page's resources dictionary maps names to objects elsewhere
// in the file. This method walks through a page's contents and // in the file. This method walks through a page's contents and
@ -397,7 +397,7 @@ class QPDFPageObjectHelper: public QPDFObjectHelper
Members(Members const&); Members(Members const&);
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // QPDFPAGEOBJECTHELPER_HH #endif // QPDFPAGEOBJECTHELPER_HH

View File

@ -173,7 +173,7 @@ class QPDFTokenizer
// beginning of the token. // beginning of the token.
QPDF_DLL QPDF_DLL
Token readToken( Token readToken(
PointerHolder<InputSource> input, std::shared_ptr<InputSource> input,
std::string const& context, std::string const& context,
bool allow_bad = false, bool allow_bad = false,
size_t max_len = 0); size_t max_len = 0);
@ -187,7 +187,7 @@ class QPDFTokenizer
// tt_inline_image or tt_bad. This is the only way readToken // tt_inline_image or tt_bad. This is the only way readToken
// returns a tt_inline_image token. // returns a tt_inline_image token.
QPDF_DLL QPDF_DLL
void expectInlineImage(PointerHolder<InputSource> input); void expectInlineImage(std::shared_ptr<InputSource> input);
private: private:
QPDFTokenizer(QPDFTokenizer const&) = delete; QPDFTokenizer(QPDFTokenizer const&) = delete;
@ -196,7 +196,7 @@ class QPDFTokenizer
void resolveLiteral(); void resolveLiteral();
bool isSpace(char); bool isSpace(char);
bool isDelimiter(char); bool isDelimiter(char);
void findEI(PointerHolder<InputSource> input); void findEI(std::shared_ptr<InputSource> input);
enum state_e { enum state_e {
st_top, st_top,
@ -246,7 +246,7 @@ class QPDFTokenizer
bool last_char_was_bs; bool last_char_was_bs;
bool last_char_was_cr; bool last_char_was_cr;
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // QPDFTOKENIZER_HH #endif // QPDFTOKENIZER_HH

View File

@ -128,7 +128,7 @@ class QPDFWriter
// Return getBuffer() in a shared pointer. // Return getBuffer() in a shared pointer.
QPDF_DLL QPDF_DLL
PointerHolder<Buffer> getBufferSharedPointer(); std::shared_ptr<Buffer> getBufferSharedPointer();
// Supply your own pipeline object. Output will be written to // Supply your own pipeline object. Output will be written to
// this pipeline, and QPDFWriter will call finish() on the // this pipeline, and QPDFWriter will call finish() on the
@ -499,7 +499,7 @@ class QPDFWriter
// If you want to be notified of progress, derive a class from // If you want to be notified of progress, derive a class from
// ProgressReporter and override the reportProgress method. // ProgressReporter and override the reportProgress method.
QPDF_DLL QPDF_DLL
void registerProgressReporter(PointerHolder<ProgressReporter>); void registerProgressReporter(std::shared_ptr<ProgressReporter>);
// Return the PDF version that will be written into the header. // Return the PDF version that will be written into the header.
// Calling this method does all the preparation for writing, so it // Calling this method does all the preparation for writing, so it
@ -550,7 +550,7 @@ class QPDFWriter
friend class QPDFWriter; friend class QPDFWriter;
public: public:
PipelinePopper(QPDFWriter* qw, PointerHolder<Buffer>* bp = 0) : PipelinePopper(QPDFWriter* qw, std::shared_ptr<Buffer>* bp = 0) :
qw(qw), qw(qw),
bp(bp) bp(bp)
{ {
@ -559,7 +559,7 @@ class QPDFWriter
private: private:
QPDFWriter* qw; QPDFWriter* qw;
PointerHolder<Buffer>* bp; std::shared_ptr<Buffer>* bp;
std::string stack_id; std::string stack_id;
}; };
friend class PipelinePopper; friend class PipelinePopper;
@ -567,7 +567,7 @@ class QPDFWriter
unsigned int bytesNeeded(long long n); unsigned int bytesNeeded(long long n);
void writeBinary(unsigned long long val, unsigned int bytes); void writeBinary(unsigned long long val, unsigned int bytes);
void writeString(std::string const& str); void writeString(std::string const& str);
void writeBuffer(PointerHolder<Buffer>&); void writeBuffer(std::shared_ptr<Buffer>&);
void writeStringQDF(std::string const& str); void writeStringQDF(std::string const& str);
void writeStringNoQDF(std::string const& str); void writeStringNoQDF(std::string const& str);
void writePad(int nspaces); void writePad(int nspaces);
@ -587,7 +587,7 @@ class QPDFWriter
QPDFObjectHandle stream, QPDFObjectHandle stream,
bool& compress_stream, bool& compress_stream,
bool& is_metadata, bool& is_metadata,
PointerHolder<Buffer>* stream_data); std::shared_ptr<Buffer>* stream_data);
void unparseObject( void unparseObject(
QPDFObjectHandle object, QPDFObjectHandle object,
int level, int level,
@ -791,7 +791,7 @@ class QPDFWriter
std::map<int, int> object_to_object_stream_no_gen; std::map<int, int> object_to_object_stream_no_gen;
// For progress reporting // For progress reporting
PointerHolder<ProgressReporter> progress_reporter; std::shared_ptr<ProgressReporter> progress_reporter;
int events_expected; int events_expected;
int events_seen; int events_seen;
int next_progress_report; int next_progress_report;
@ -800,7 +800,7 @@ class QPDFWriter
// Keep all member variables inside the Members object, which we // Keep all member variables inside the Members object, which we
// dynamically allocate. This makes it possible to add new private // dynamically allocate. This makes it possible to add new private
// members without breaking binary compatibility. // members without breaking binary compatibility.
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // QPDFWRITER_HH #endif // QPDFWRITER_HH

View File

@ -420,7 +420,7 @@ namespace QUtil
QPDF_DLL QPDF_DLL
void read_file_into_memory( void read_file_into_memory(
char const* filename, PointerHolder<char>& file_buf, size_t& size); char const* filename, std::shared_ptr<char>& file_buf, size_t& size);
// This used to be called strcasecmp, but that is a macro on some // This used to be called strcasecmp, but that is a macro on some
// platforms, so we have to give it a name that is not likely to // platforms, so we have to give it a name that is not likely to

View File

@ -52,7 +52,7 @@ void
Buffer::copy(Buffer const& rhs) Buffer::copy(Buffer const& rhs)
{ {
if (this != &rhs) { if (this != &rhs) {
this->m = PointerHolder<Members>(new Members(rhs.m->size, 0, true)); this->m = std::shared_ptr<Members>(new Members(rhs.m->size, 0, true));
if (this->m->size) { if (this->m->size) {
memcpy(this->m->buf, rhs.m->buf, this->m->size); memcpy(this->m->buf, rhs.m->buf, this->m->size);
} }

View File

@ -26,7 +26,7 @@ void
ClosedFileInputSource::before() ClosedFileInputSource::before()
{ {
if (0 == this->m->fis.get()) { if (0 == this->m->fis.get()) {
this->m->fis = make_pointer_holder<FileInputSource>(); this->m->fis = std::make_shared<FileInputSource>();
this->m->fis->setFilename(this->m->filename.c_str()); this->m->fis->setFilename(this->m->filename.c_str());
this->m->fis->seek(this->m->offset, SEEK_SET); this->m->fis->seek(this->m->offset, SEEK_SET);
this->m->fis->setLastOffset(this->last_offset); this->m->fis->setLastOffset(this->last_offset);

View File

@ -26,7 +26,7 @@ FileInputSource::FileInputSource() :
void void
FileInputSource::setFilename(char const* filename) FileInputSource::setFilename(char const* filename)
{ {
this->m = PointerHolder<Members>(new Members(true)); this->m = std::shared_ptr<Members>(new Members(true));
this->m->filename = filename; this->m->filename = filename;
this->m->file = QUtil::safe_fopen(filename, "rb"); this->m->file = QUtil::safe_fopen(filename, "rb");
} }
@ -34,7 +34,7 @@ FileInputSource::setFilename(char const* filename)
void void
FileInputSource::setFile(char const* description, FILE* filep, bool close_file) FileInputSource::setFile(char const* description, FILE* filep, bool close_file)
{ {
this->m = PointerHolder<Members>(new Members(close_file)); this->m = std::shared_ptr<Members>(new Members(close_file));
this->m->filename = description; this->m->filename = description;
this->m->file = filep; this->m->file = filep;
this->seek(0, SEEK_SET); this->seek(0, SEEK_SET);

View File

@ -5,7 +5,7 @@
#include <stdexcept> #include <stdexcept>
OffsetInputSource::OffsetInputSource( OffsetInputSource::OffsetInputSource(
PointerHolder<InputSource> proxied, qpdf_offset_t global_offset) : std::shared_ptr<InputSource> proxied, qpdf_offset_t global_offset) :
proxied(proxied), proxied(proxied),
global_offset(global_offset) global_offset(global_offset)
{ {

View File

@ -30,13 +30,13 @@ void
Pl_Buffer::write(unsigned char* buf, size_t len) Pl_Buffer::write(unsigned char* buf, size_t len)
{ {
if (this->m->data.get() == 0) { if (this->m->data.get() == 0) {
this->m->data = make_pointer_holder<Buffer>(len); this->m->data = std::make_shared<Buffer>(len);
} }
size_t cur_size = this->m->data->getSize(); size_t cur_size = this->m->data->getSize();
size_t left = cur_size - this->m->total_size; size_t left = cur_size - this->m->total_size;
if (left < len) { if (left < len) {
size_t new_size = std::max(this->m->total_size + len, 2 * cur_size); size_t new_size = std::max(this->m->total_size + len, 2 * cur_size);
auto b = make_pointer_holder<Buffer>(new_size); auto b = std::make_shared<Buffer>(new_size);
memcpy(b->getBuffer(), this->m->data->getBuffer(), this->m->total_size); memcpy(b->getBuffer(), this->m->data->getBuffer(), this->m->total_size);
this->m->data = b; this->m->data = b;
} }
@ -72,14 +72,14 @@ Pl_Buffer::getBuffer()
unsigned char* p = b->getBuffer(); unsigned char* p = b->getBuffer();
memcpy(p, this->m->data->getBuffer(), this->m->total_size); memcpy(p, this->m->data->getBuffer(), this->m->total_size);
} }
this->m = PointerHolder<Members>(new Members()); this->m = std::shared_ptr<Members>(new Members());
return b; return b;
} }
PointerHolder<Buffer> std::shared_ptr<Buffer>
Pl_Buffer::getBufferSharedPointer() Pl_Buffer::getBufferSharedPointer()
{ {
return PointerHolder<Buffer>(getBuffer()); return std::shared_ptr<Buffer>(getBuffer());
} }
void void
@ -97,5 +97,5 @@ Pl_Buffer::getMallocBuffer(unsigned char** buf, size_t* len)
} else { } else {
*buf = nullptr; *buf = nullptr;
} }
this->m = PointerHolder<Members>(new Members()); this->m = std::shared_ptr<Members>(new Members());
} }

View File

@ -95,7 +95,7 @@ Pl_DCT::finish()
{ {
this->m->buf.finish(); this->m->buf.finish();
// Using a PointerHolder<Buffer> here and passing it into compress // Using a std::shared_ptr<Buffer> here and passing it into compress
// and decompress causes a memory leak with setjmp/longjmp. Just // and decompress causes a memory leak with setjmp/longjmp. Just
// use a pointer and delete it. // use a pointer and delete it.
Buffer* b = this->m->buf.getBuffer(); Buffer* b = this->m->buf.getBuffer();

View File

@ -48,9 +48,9 @@ Pl_PNGFilter::Pl_PNGFilter(
} }
this->bytes_per_row = bpr & UINT_MAX; this->bytes_per_row = bpr & UINT_MAX;
this->buf1 = this->buf1 =
make_array_pointer_holder<unsigned char>(this->bytes_per_row + 1); QUtil::make_shared_array<unsigned char>(this->bytes_per_row + 1);
this->buf2 = this->buf2 =
make_array_pointer_holder<unsigned char>(this->bytes_per_row + 1); QUtil::make_shared_array<unsigned char>(this->bytes_per_row + 1);
memset(this->buf1.get(), 0, this->bytes_per_row + 1); memset(this->buf1.get(), 0, this->bytes_per_row + 1);
memset(this->buf2.get(), 0, this->bytes_per_row + 1); memset(this->buf2.get(), 0, this->bytes_per_row + 1);
this->cur_row = this->buf1.get(); this->cur_row = this->buf1.get();

View File

@ -44,7 +44,7 @@ void
Pl_QPDFTokenizer::finish() Pl_QPDFTokenizer::finish()
{ {
this->m->buf.finish(); this->m->buf.finish();
auto input = PointerHolder<InputSource>( auto input = std::shared_ptr<InputSource>(
// line-break // line-break
new BufferInputSource( new BufferInputSource(
"tokenizer data", this->m->buf.getBuffer(), true)); "tokenizer data", this->m->buf.getBuffer(), true));

View File

@ -12,7 +12,7 @@ Pl_RC4::Pl_RC4(
out_bufsize(out_bufsize), out_bufsize(out_bufsize),
rc4(key_data, key_len) rc4(key_data, key_len)
{ {
this->outbuf = make_array_pointer_holder<unsigned char>(out_bufsize); this->outbuf = QUtil::make_shared_array<unsigned char>(out_bufsize);
} }
Pl_RC4::~Pl_RC4() Pl_RC4::~Pl_RC4()

View File

@ -41,7 +41,7 @@ Pl_TIFFPredictor::Pl_TIFFPredictor(
} }
this->bytes_per_row = bpr & UINT_MAX; this->bytes_per_row = bpr & UINT_MAX;
this->cur_row = this->cur_row =
make_array_pointer_holder<unsigned char>(this->bytes_per_row); QUtil::make_shared_array<unsigned char>(this->bytes_per_row);
memset(this->cur_row.get(), 0, this->bytes_per_row); memset(this->cur_row.get(), 0, this->bytes_per_row);
} }

View File

@ -106,8 +106,8 @@ class InvalidInputSource: public InputSource
}; };
QPDF::ForeignStreamData::ForeignStreamData( QPDF::ForeignStreamData::ForeignStreamData(
PointerHolder<EncryptionParameters> encp, std::shared_ptr<EncryptionParameters> encp,
PointerHolder<InputSource> file, std::shared_ptr<InputSource> file,
int foreign_objid, int foreign_objid,
int foreign_generation, int foreign_generation,
qpdf_offset_t offset, qpdf_offset_t offset,
@ -138,7 +138,7 @@ QPDF::CopiedStreamDataProvider::provideStreamData(
bool suppress_warnings, bool suppress_warnings,
bool will_retry) bool will_retry)
{ {
PointerHolder<ForeignStreamData> foreign_data = std::shared_ptr<ForeignStreamData> foreign_data =
this->foreign_stream_data[QPDFObjGen(objid, generation)]; this->foreign_stream_data[QPDFObjGen(objid, generation)];
bool result = false; bool result = false;
if (foreign_data.get()) { if (foreign_data.get()) {
@ -165,7 +165,8 @@ QPDF::CopiedStreamDataProvider::registerForeignStream(
void void
QPDF::CopiedStreamDataProvider::registerForeignStream( QPDF::CopiedStreamDataProvider::registerForeignStream(
QPDFObjGen const& local_og, PointerHolder<ForeignStreamData> foreign_stream) QPDFObjGen const& local_og,
std::shared_ptr<ForeignStreamData> foreign_stream)
{ {
this->foreign_stream_data[local_og] = foreign_stream; this->foreign_stream_data[local_og] = foreign_stream;
} }
@ -249,7 +250,7 @@ QPDF::~QPDF()
// If two objects are mutually referential (through each object // If two objects are mutually referential (through each object
// having an array or dictionary that contains an indirect // having an array or dictionary that contains an indirect
// reference to the other), the circular references in the // reference to the other), the circular references in the
// PointerHolder objects will prevent the objects from being // std::shared_ptr objects will prevent the objects from being
// deleted. Walk through all objects in the object cache, which // deleted. Walk through all objects in the object cache, which
// is those objects that we read from the file, and break all // is those objects that we read from the file, and break all
// resolved references. At this point, obviously no one is still // resolved references. At this point, obviously no one is still
@ -274,7 +275,7 @@ QPDF::processFile(char const* filename, char const* password)
{ {
FileInputSource* fi = new FileInputSource(); FileInputSource* fi = new FileInputSource();
fi->setFilename(filename); fi->setFilename(filename);
processInputSource(PointerHolder<InputSource>(fi), password); processInputSource(std::shared_ptr<InputSource>(fi), password);
} }
void void
@ -283,7 +284,7 @@ QPDF::processFile(
{ {
FileInputSource* fi = new FileInputSource(); FileInputSource* fi = new FileInputSource();
fi->setFile(description, filep, close_file); fi->setFile(description, filep, close_file);
processInputSource(PointerHolder<InputSource>(fi), password); processInputSource(std::shared_ptr<InputSource>(fi), password);
} }
void void
@ -294,7 +295,7 @@ QPDF::processMemoryFile(
char const* password) char const* password)
{ {
processInputSource( processInputSource(
PointerHolder<InputSource>( std::shared_ptr<InputSource>(
// line-break // line-break
new BufferInputSource( new BufferInputSource(
description, description,
@ -305,7 +306,7 @@ QPDF::processMemoryFile(
void void
QPDF::processInputSource( QPDF::processInputSource(
PointerHolder<InputSource> source, char const* password) std::shared_ptr<InputSource> source, char const* password)
{ {
this->m->file = source; this->m->file = source;
parse(password); parse(password);
@ -314,7 +315,7 @@ QPDF::processInputSource(
void void
QPDF::closeInputSource() QPDF::closeInputSource()
{ {
this->m->file = PointerHolder<InputSource>(new InvalidInputSource()); this->m->file = std::shared_ptr<InputSource>(new InvalidInputSource());
} }
void void
@ -425,7 +426,7 @@ QPDF::findHeader()
// offsets in the file are such that 0 points to the // offsets in the file are such that 0 points to the
// beginning of the header. // beginning of the header.
QTC::TC("qpdf", "QPDF global offset"); QTC::TC("qpdf", "QPDF global offset");
this->m->file = PointerHolder<InputSource>( this->m->file = std::shared_ptr<InputSource>(
new OffsetInputSource(this->m->file, global_offset)); new OffsetInputSource(this->m->file, global_offset));
} }
} }
@ -1182,7 +1183,7 @@ QPDF::processXRefStream(qpdf_offset_t xref_offset, QPDFObjectHandle& xref_obj)
// that this multiplication does not cause an overflow. // that this multiplication does not cause an overflow.
size_t expected_size = entry_size * num_entries; size_t expected_size = entry_size * num_entries;
PointerHolder<Buffer> bp = xref_obj.getStreamData(qpdf_dl_specialized); std::shared_ptr<Buffer> bp = xref_obj.getStreamData(qpdf_dl_specialized);
size_t actual_size = bp->getSize(); size_t actual_size = bp->getSize();
if (expected_size != actual_size) { if (expected_size != actual_size) {
@ -1516,7 +1517,7 @@ QPDF::setLastObjectDescription(
QPDFObjectHandle QPDFObjectHandle
QPDF::readObject( QPDF::readObject(
PointerHolder<InputSource> input, std::shared_ptr<InputSource> input,
std::string const& description, std::string const& description,
int objid, int objid,
int generation, int generation,
@ -1526,11 +1527,11 @@ QPDF::readObject(
qpdf_offset_t offset = input->tell(); qpdf_offset_t offset = input->tell();
bool empty = false; bool empty = false;
PointerHolder<StringDecrypter> decrypter_ph; std::shared_ptr<StringDecrypter> decrypter_ph;
StringDecrypter* decrypter = 0; StringDecrypter* decrypter = 0;
if (this->m->encp->encrypted && (!in_object_stream)) { if (this->m->encp->encrypted && (!in_object_stream)) {
decrypter_ph = decrypter_ph =
make_pointer_holder<StringDecrypter>(this, objid, generation); std::make_shared<StringDecrypter>(this, objid, generation);
decrypter = decrypter_ph.get(); decrypter = decrypter_ph.get();
} }
QPDFObjectHandle object = QPDFObjectHandle::parse( QPDFObjectHandle object = QPDFObjectHandle::parse(
@ -1706,7 +1707,7 @@ QPDF::findEndstream()
size_t size_t
QPDF::recoverStreamLength( QPDF::recoverStreamLength(
PointerHolder<InputSource> input, std::shared_ptr<InputSource> input,
int objid, int objid,
int generation, int generation,
qpdf_offset_t stream_offset) qpdf_offset_t stream_offset)
@ -1784,7 +1785,7 @@ QPDF::recoverStreamLength(
} }
QPDFTokenizer::Token QPDFTokenizer::Token
QPDF::readToken(PointerHolder<InputSource> input, size_t max_len) QPDF::readToken(std::shared_ptr<InputSource> input, size_t max_len)
{ {
return this->m->tokenizer.readToken( return this->m->tokenizer.readToken(
input, this->m->last_object_description, true, max_len); input, this->m->last_object_description, true, max_len);
@ -1971,7 +1972,7 @@ QPDF::readObjectAtOffset(
} }
bool bool
QPDF::objectChanged(QPDFObjGen const& og, PointerHolder<QPDFObject>& oph) QPDF::objectChanged(QPDFObjGen const& og, std::shared_ptr<QPDFObject>& oph)
{ {
// See if the object cached at og, if any, is the one passed in. // See if the object cached at og, if any, is the one passed in.
// QPDFObjectHandle uses this to detect outdated handles to // QPDFObjectHandle uses this to detect outdated handles to
@ -1992,7 +1993,7 @@ QPDF::objectChanged(QPDFObjGen const& og, PointerHolder<QPDFObject>& oph)
return (c->second.object.get() != oph.get()); return (c->second.object.get() != oph.get());
} }
PointerHolder<QPDFObject> std::shared_ptr<QPDFObject>
QPDF::resolve(int objid, int generation) QPDF::resolve(int objid, int generation)
{ {
// Check object cache before checking xref table. This allows us // Check object cache before checking xref table. This allows us
@ -2011,7 +2012,7 @@ QPDF::resolve(int objid, int generation)
this->m->file->getLastOffset(), this->m->file->getLastOffset(),
("loop detected resolving object " + QUtil::int_to_string(objid) + ("loop detected resolving object " + QUtil::int_to_string(objid) +
" " + QUtil::int_to_string(generation)))); " " + QUtil::int_to_string(generation))));
return PointerHolder<QPDFObject>(new QPDF_Null); return std::shared_ptr<QPDFObject>(new QPDF_Null);
} }
ResolveRecorder rr(this, og); ResolveRecorder rr(this, og);
@ -2071,7 +2072,7 @@ QPDF::resolve(int objid, int generation)
ObjCache(QPDFObjectHandle::ObjAccessor::getObject(oh), -1, -1); ObjCache(QPDFObjectHandle::ObjAccessor::getObject(oh), -1, -1);
} }
PointerHolder<QPDFObject> result(this->m->obj_cache[og].object); std::shared_ptr<QPDFObject> result(this->m->obj_cache[og].object);
if (!result->hasDescription()) { if (!result->hasDescription()) {
result->setDescription( result->setDescription(
this, this,
@ -2135,8 +2136,8 @@ QPDF::resolveObjectsInStream(int obj_stream_number)
std::map<int, int> offsets; std::map<int, int> offsets;
PointerHolder<Buffer> bp = obj_stream.getStreamData(qpdf_dl_specialized); std::shared_ptr<Buffer> bp = obj_stream.getStreamData(qpdf_dl_specialized);
auto input = PointerHolder<InputSource>( auto input = std::shared_ptr<InputSource>(
// line-break // line-break
new BufferInputSource( new BufferInputSource(
(this->m->file->getName() + " object stream " + (this->m->file->getName() + " object stream " +
@ -2496,7 +2497,7 @@ QPDF::copyStreamData(QPDFObjectHandle result, QPDFObjectHandle foreign)
this->m->copied_stream_data_provider = this->m->copied_stream_data_provider =
new CopiedStreamDataProvider(*this); new CopiedStreamDataProvider(*this);
this->m->copied_streams = this->m->copied_streams =
PointerHolder<QPDFObjectHandle::StreamDataProvider>( std::shared_ptr<QPDFObjectHandle::StreamDataProvider>(
this->m->copied_stream_data_provider); this->m->copied_stream_data_provider);
} }
QPDFObjGen local_og(result.getObjGen()); QPDFObjGen local_og(result.getObjGen());
@ -2513,7 +2514,7 @@ QPDF::copyStreamData(QPDFObjectHandle result, QPDFObjectHandle foreign)
throw std::logic_error("unable to retrieve underlying" throw std::logic_error("unable to retrieve underlying"
" stream object from foreign stream"); " stream object from foreign stream");
} }
PointerHolder<Buffer> stream_buffer = stream->getStreamDataBuffer(); std::shared_ptr<Buffer> stream_buffer = stream->getStreamDataBuffer();
if ((foreign_stream_qpdf->m->immediate_copy_from) && if ((foreign_stream_qpdf->m->immediate_copy_from) &&
(stream_buffer.get() == 0)) { (stream_buffer.get() == 0)) {
// Pull the stream data into a buffer before attempting // Pull the stream data into a buffer before attempting
@ -2527,7 +2528,7 @@ QPDF::copyStreamData(QPDFObjectHandle result, QPDFObjectHandle foreign)
old_dict.getKey("/DecodeParms")); old_dict.getKey("/DecodeParms"));
stream_buffer = stream->getStreamDataBuffer(); stream_buffer = stream->getStreamDataBuffer();
} }
PointerHolder<QPDFObjectHandle::StreamDataProvider> stream_provider = std::shared_ptr<QPDFObjectHandle::StreamDataProvider> stream_provider =
stream->getStreamDataProvider(); stream->getStreamDataProvider();
if (stream_buffer.get()) { if (stream_buffer.get()) {
QTC::TC("qpdf", "QPDF copy foreign stream with buffer"); QTC::TC("qpdf", "QPDF copy foreign stream with buffer");
@ -2543,7 +2544,7 @@ QPDF::copyStreamData(QPDFObjectHandle result, QPDFObjectHandle foreign)
dict.getKey("/Filter"), dict.getKey("/Filter"),
dict.getKey("/DecodeParms")); dict.getKey("/DecodeParms"));
} else { } else {
auto foreign_stream_data = make_pointer_holder<ForeignStreamData>( auto foreign_stream_data = std::make_shared<ForeignStreamData>(
foreign_stream_qpdf->m->encp, foreign_stream_qpdf->m->encp,
foreign_stream_qpdf->m->file, foreign_stream_qpdf->m->file,
foreign.getObjectID(), foreign.getObjectID(),
@ -2758,8 +2759,8 @@ QPDF::getCompressibleObjGens()
bool bool
QPDF::pipeStreamData( QPDF::pipeStreamData(
PointerHolder<EncryptionParameters> encp, std::shared_ptr<EncryptionParameters> encp,
PointerHolder<InputSource> file, std::shared_ptr<InputSource> file,
QPDF& qpdf_for_warning, QPDF& qpdf_for_warning,
int objid, int objid,
int generation, int generation,
@ -2870,7 +2871,7 @@ QPDF::pipeStreamData(
bool bool
QPDF::pipeForeignStreamData( QPDF::pipeForeignStreamData(
PointerHolder<ForeignStreamData> foreign, std::shared_ptr<ForeignStreamData> foreign,
Pipeline* pipeline, Pipeline* pipeline,
bool suppress_warnings, bool suppress_warnings,
bool will_retry) bool will_retry)

View File

@ -772,7 +772,7 @@ QPDFAcroFormDocumentHelper::adjustAppearanceStream(
QTC::TC("qpdf", "QPDFAcroFormDocumentHelper AP parse error"); QTC::TC("qpdf", "QPDFAcroFormDocumentHelper AP parse error");
} }
auto rr = new ResourceReplacer(dr_map, rf.getNamesByResourceType()); auto rr = new ResourceReplacer(dr_map, rf.getNamesByResourceType());
auto tf = PointerHolder<QPDFObjectHandle::TokenFilter>(rr); auto tf = std::shared_ptr<QPDFObjectHandle::TokenFilter>(rr);
stream.addTokenFilter(tf); stream.addTokenFilter(tf);
} catch (std::exception& e) { } catch (std::exception& e) {
// No way to reproduce in test suite right now since error // No way to reproduce in test suite right now since error
@ -792,13 +792,13 @@ QPDFAcroFormDocumentHelper::transformAnnotations(
QPDF* from_qpdf, QPDF* from_qpdf,
QPDFAcroFormDocumentHelper* from_afdh) QPDFAcroFormDocumentHelper* from_afdh)
{ {
PointerHolder<QPDFAcroFormDocumentHelper> afdhph; std::shared_ptr<QPDFAcroFormDocumentHelper> afdhph;
if (!from_qpdf) { if (!from_qpdf) {
// Assume these are from the same QPDF. // Assume these are from the same QPDF.
from_qpdf = &this->qpdf; from_qpdf = &this->qpdf;
from_afdh = this; from_afdh = this;
} else if ((from_qpdf != &this->qpdf) && (!from_afdh)) { } else if ((from_qpdf != &this->qpdf) && (!from_afdh)) {
afdhph = make_pointer_holder<QPDFAcroFormDocumentHelper>(*from_qpdf); afdhph = std::make_shared<QPDFAcroFormDocumentHelper>(*from_qpdf);
from_afdh = afdhph.get(); from_afdh = afdhph.get();
} }
bool foreign = (from_qpdf != &this->qpdf); bool foreign = (from_qpdf != &this->qpdf);

View File

@ -92,7 +92,8 @@ QPDFEFStreamObjectHelper::getChecksum()
} }
QPDFEFStreamObjectHelper QPDFEFStreamObjectHelper
QPDFEFStreamObjectHelper::createEFStream(QPDF& qpdf, PointerHolder<Buffer> data) QPDFEFStreamObjectHelper::createEFStream(
QPDF& qpdf, std::shared_ptr<Buffer> data)
{ {
return newFromStream(QPDFObjectHandle::newStream(&qpdf, data)); return newFromStream(QPDFObjectHandle::newStream(&qpdf, data));
} }

View File

@ -915,6 +915,6 @@ QPDFFormFieldObjectHelper::generateTextAppearance(
AS.addTokenFilter( AS.addTokenFilter(
// line-break // line-break
PointerHolder<QPDFObjectHandle::TokenFilter>( std::shared_ptr<QPDFObjectHandle::TokenFilter>(
new ValueSetter(DA, V, opt, tf, bbox))); new ValueSetter(DA, V, opt, tf, bbox)));
} }

View File

@ -1879,7 +1879,7 @@ QPDFJob::processFile(
std::shared_ptr<QPDF> std::shared_ptr<QPDF>
QPDFJob::processInputSource( QPDFJob::processInputSource(
PointerHolder<InputSource> is, char const* password, bool used_for_input) std::shared_ptr<InputSource> is, char const* password, bool used_for_input)
{ {
auto f1 = std::mem_fn(&QPDF::processInputSource); auto f1 = std::mem_fn(&QPDF::processInputSource);
auto fn = std::bind(f1, std::placeholders::_1, is, std::placeholders::_2); auto fn = std::bind(f1, std::placeholders::_1, is, std::placeholders::_2);
@ -2238,7 +2238,7 @@ QPDFJob::handleTransformations(QPDF& pdf)
m->oi_min_height, m->oi_min_height,
m->oi_min_area, m->oi_min_area,
image); image);
PointerHolder<QPDFObjectHandle::StreamDataProvider> sdp(io); std::shared_ptr<QPDFObjectHandle::StreamDataProvider> sdp(io);
if (io->evaluate( if (io->evaluate(
"image " + name + " on page " + "image " + name + " on page " +
QUtil::int_to_string(pageno))) { QUtil::int_to_string(pageno))) {
@ -2494,17 +2494,17 @@ QPDFJob::handlePageSpecs(
cout << prefix << ": processing " << page_spec.filename cout << prefix << ": processing " << page_spec.filename
<< std::endl; << std::endl;
}); });
PointerHolder<InputSource> is; std::shared_ptr<InputSource> is;
ClosedFileInputSource* cis = 0; ClosedFileInputSource* cis = 0;
if (!m->keep_files_open) { if (!m->keep_files_open) {
QTC::TC("qpdf", "QPDFJob keep files open n"); QTC::TC("qpdf", "QPDFJob keep files open n");
cis = new ClosedFileInputSource(page_spec.filename.c_str()); cis = new ClosedFileInputSource(page_spec.filename.c_str());
is = PointerHolder<InputSource>(cis); is = std::shared_ptr<InputSource>(cis);
cis->stayOpen(true); cis->stayOpen(true);
} else { } else {
QTC::TC("qpdf", "QPDFJob keep files open y"); QTC::TC("qpdf", "QPDFJob keep files open y");
FileInputSource* fis = new FileInputSource(); FileInputSource* fis = new FileInputSource();
is = PointerHolder<InputSource>(fis); is = std::shared_ptr<InputSource>(fis);
fis->setFilename(page_spec.filename.c_str()); fis->setFilename(page_spec.filename.c_str());
} }
std::shared_ptr<QPDF> qpdf_ph = std::shared_ptr<QPDF> qpdf_ph =
@ -3064,12 +3064,13 @@ QPDFJob::setWriterOptions(QPDF& pdf, QPDFWriter& w)
w.forcePDFVersion(version, extension_level); w.forcePDFVersion(version, extension_level);
} }
if (m->progress && m->outfilename) { if (m->progress && m->outfilename) {
w.registerProgressReporter(PointerHolder<QPDFWriter::ProgressReporter>( w.registerProgressReporter(
// line-break std::shared_ptr<QPDFWriter::ProgressReporter>(
new ProgressReporter( // line-break
*(this->m->cout), new ProgressReporter(
this->m->message_prefix, *(this->m->cout),
m->outfilename.get()))); this->m->message_prefix,
m->outfilename.get())));
} }
} }

View File

@ -685,7 +685,7 @@ QPDFJob::Config::showObject(std::string const& parameter)
QPDFJob::Config* QPDFJob::Config*
QPDFJob::Config::jobJsonFile(std::string const& parameter) QPDFJob::Config::jobJsonFile(std::string const& parameter)
{ {
PointerHolder<char> file_buf; std::shared_ptr<char> file_buf;
size_t size; size_t size;
QUtil::read_file_into_memory(parameter.c_str(), file_buf, size); QUtil::read_file_into_memory(parameter.c_str(), file_buf, size);
try { try {

View File

@ -252,7 +252,7 @@ QPDFObjectHandle::setObjectDescriptionFromInput(
QPDFObjectHandle object, QPDFObjectHandle object,
QPDF* context, QPDF* context,
std::string const& description, std::string const& description,
PointerHolder<InputSource> input, std::shared_ptr<InputSource> input,
qpdf_offset_t offset) qpdf_offset_t offset)
{ {
object.setObjectDescription( object.setObjectDescription(
@ -1337,14 +1337,14 @@ QPDFObjectHandle::replaceDict(QPDFObjectHandle new_dict)
dynamic_cast<QPDF_Stream*>(obj.get())->replaceDict(new_dict); dynamic_cast<QPDF_Stream*>(obj.get())->replaceDict(new_dict);
} }
PointerHolder<Buffer> std::shared_ptr<Buffer>
QPDFObjectHandle::getStreamData(qpdf_stream_decode_level_e level) QPDFObjectHandle::getStreamData(qpdf_stream_decode_level_e level)
{ {
assertStream(); assertStream();
return dynamic_cast<QPDF_Stream*>(obj.get())->getStreamData(level); return dynamic_cast<QPDF_Stream*>(obj.get())->getStreamData(level);
} }
PointerHolder<Buffer> std::shared_ptr<Buffer>
QPDFObjectHandle::getRawStreamData() QPDFObjectHandle::getRawStreamData()
{ {
assertStream(); assertStream();
@ -1410,7 +1410,7 @@ QPDFObjectHandle::pipeStreamData(
void void
QPDFObjectHandle::replaceStreamData( QPDFObjectHandle::replaceStreamData(
PointerHolder<Buffer> data, std::shared_ptr<Buffer> data,
QPDFObjectHandle const& filter, QPDFObjectHandle const& filter,
QPDFObjectHandle const& decode_parms) QPDFObjectHandle const& decode_parms)
{ {
@ -1426,7 +1426,7 @@ QPDFObjectHandle::replaceStreamData(
QPDFObjectHandle const& decode_parms) QPDFObjectHandle const& decode_parms)
{ {
assertStream(); assertStream();
auto b = make_pointer_holder<Buffer>(data.length()); auto b = std::make_shared<Buffer>(data.length());
unsigned char* bp = b->getBuffer(); unsigned char* bp = b->getBuffer();
memcpy(bp, data.c_str(), data.length()); memcpy(bp, data.c_str(), data.length());
dynamic_cast<QPDF_Stream*>(obj.get())->replaceStreamData( dynamic_cast<QPDF_Stream*>(obj.get())->replaceStreamData(
@ -1435,7 +1435,7 @@ QPDFObjectHandle::replaceStreamData(
void void
QPDFObjectHandle::replaceStreamData( QPDFObjectHandle::replaceStreamData(
PointerHolder<StreamDataProvider> provider, std::shared_ptr<StreamDataProvider> provider,
QPDFObjectHandle const& filter, QPDFObjectHandle const& filter,
QPDFObjectHandle const& decode_parms) QPDFObjectHandle const& decode_parms)
{ {
@ -1487,7 +1487,7 @@ QPDFObjectHandle::replaceStreamData(
{ {
assertStream(); assertStream();
auto sdp = auto sdp =
PointerHolder<StreamDataProvider>(new FunctionProvider(provider)); std::shared_ptr<StreamDataProvider>(new FunctionProvider(provider));
dynamic_cast<QPDF_Stream*>(obj.get())->replaceStreamData( dynamic_cast<QPDF_Stream*>(obj.get())->replaceStreamData(
sdp, filter, decode_parms); sdp, filter, decode_parms);
} }
@ -1500,7 +1500,7 @@ QPDFObjectHandle::replaceStreamData(
{ {
assertStream(); assertStream();
auto sdp = auto sdp =
PointerHolder<StreamDataProvider>(new FunctionProvider(provider)); std::shared_ptr<StreamDataProvider>(new FunctionProvider(provider));
dynamic_cast<QPDF_Stream*>(obj.get())->replaceStreamData( dynamic_cast<QPDF_Stream*>(obj.get())->replaceStreamData(
sdp, filter, decode_parms); sdp, filter, decode_parms);
} }
@ -1694,7 +1694,7 @@ QPDFObjectHandle::coalesceContentStreams()
QPDFObjectHandle new_contents = newStream(qpdf); QPDFObjectHandle new_contents = newStream(qpdf);
this->replaceKey("/Contents", new_contents); this->replaceKey("/Contents", new_contents);
auto provider = PointerHolder<StreamDataProvider>( auto provider = std::shared_ptr<StreamDataProvider>(
new CoalesceProvider(*this, contents)); new CoalesceProvider(*this, contents));
new_contents.replaceStreamData(provider, newNull(), newNull()); new_contents.replaceStreamData(provider, newNull(), newNull());
} }
@ -1772,7 +1772,7 @@ QPDFObjectHandle::parse(
std::string const& object_str, std::string const& object_str,
std::string const& object_description) std::string const& object_description)
{ {
auto input = PointerHolder<InputSource>( auto input = std::shared_ptr<InputSource>(
new BufferInputSource("parsed object", object_str)); new BufferInputSource("parsed object", object_str));
QPDFTokenizer tokenizer; QPDFTokenizer tokenizer;
bool empty = false; bool empty = false;
@ -1908,13 +1908,13 @@ QPDFObjectHandle::parseContentStream_internal(
void void
QPDFObjectHandle::parseContentStream_data( QPDFObjectHandle::parseContentStream_data(
PointerHolder<Buffer> stream_data, std::shared_ptr<Buffer> stream_data,
std::string const& description, std::string const& description,
ParserCallbacks* callbacks, ParserCallbacks* callbacks,
QPDF* context) QPDF* context)
{ {
size_t stream_length = stream_data->getSize(); size_t stream_length = stream_data->getSize();
auto input = PointerHolder<InputSource>( auto input = std::shared_ptr<InputSource>(
new BufferInputSource(description, stream_data.get())); new BufferInputSource(description, stream_data.get()));
QPDFTokenizer tokenizer; QPDFTokenizer tokenizer;
tokenizer.allowEOF(); tokenizer.allowEOF();
@ -1969,14 +1969,14 @@ QPDFObjectHandle::parseContentStream_data(
} }
void void
QPDFObjectHandle::addContentTokenFilter(PointerHolder<TokenFilter> filter) QPDFObjectHandle::addContentTokenFilter(std::shared_ptr<TokenFilter> filter)
{ {
coalesceContentStreams(); coalesceContentStreams();
this->getKey("/Contents").addTokenFilter(filter); this->getKey("/Contents").addTokenFilter(filter);
} }
void void
QPDFObjectHandle::addTokenFilter(PointerHolder<TokenFilter> filter) QPDFObjectHandle::addTokenFilter(std::shared_ptr<TokenFilter> filter)
{ {
assertStream(); assertStream();
return dynamic_cast<QPDF_Stream*>(obj.get())->addTokenFilter(filter); return dynamic_cast<QPDF_Stream*>(obj.get())->addTokenFilter(filter);
@ -1984,7 +1984,7 @@ QPDFObjectHandle::addTokenFilter(PointerHolder<TokenFilter> filter)
QPDFObjectHandle QPDFObjectHandle
QPDFObjectHandle::parse( QPDFObjectHandle::parse(
PointerHolder<InputSource> input, std::shared_ptr<InputSource> input,
std::string const& object_description, std::string const& object_description,
QPDFTokenizer& tokenizer, QPDFTokenizer& tokenizer,
bool& empty, bool& empty,
@ -1997,7 +1997,7 @@ QPDFObjectHandle::parse(
QPDFObjectHandle QPDFObjectHandle
QPDFObjectHandle::parseInternal( QPDFObjectHandle::parseInternal(
PointerHolder<InputSource> input, std::shared_ptr<InputSource> input,
std::string const& object_description, std::string const& object_description,
QPDFTokenizer& tokenizer, QPDFTokenizer& tokenizer,
bool& empty, bool& empty,
@ -2698,7 +2698,7 @@ QPDFObjectHandle::newStream(QPDF* qpdf)
} }
QPDFObjectHandle QPDFObjectHandle
QPDFObjectHandle::newStream(QPDF* qpdf, PointerHolder<Buffer> data) QPDFObjectHandle::newStream(QPDF* qpdf, std::shared_ptr<Buffer> data)
{ {
QTC::TC("qpdf", "QPDFObjectHandle newStream with data"); QTC::TC("qpdf", "QPDFObjectHandle newStream with data");
QPDFObjectHandle result = newStream(qpdf); QPDFObjectHandle result = newStream(qpdf);
@ -2836,26 +2836,27 @@ QPDFObjectHandle::copyObject(
this->objid = 0; this->objid = 0;
this->generation = 0; this->generation = 0;
PointerHolder<QPDFObject> new_obj; std::shared_ptr<QPDFObject> new_obj;
if (isBool()) { if (isBool()) {
QTC::TC("qpdf", "QPDFObjectHandle clone bool"); QTC::TC("qpdf", "QPDFObjectHandle clone bool");
new_obj = PointerHolder<QPDFObject>(new QPDF_Bool(getBoolValue())); new_obj = std::shared_ptr<QPDFObject>(new QPDF_Bool(getBoolValue()));
} else if (isNull()) { } else if (isNull()) {
QTC::TC("qpdf", "QPDFObjectHandle clone null"); QTC::TC("qpdf", "QPDFObjectHandle clone null");
new_obj = PointerHolder<QPDFObject>(new QPDF_Null()); new_obj = std::shared_ptr<QPDFObject>(new QPDF_Null());
} else if (isInteger()) { } else if (isInteger()) {
QTC::TC("qpdf", "QPDFObjectHandle clone integer"); QTC::TC("qpdf", "QPDFObjectHandle clone integer");
new_obj = PointerHolder<QPDFObject>(new QPDF_Integer(getIntValue())); new_obj = std::shared_ptr<QPDFObject>(new QPDF_Integer(getIntValue()));
} else if (isReal()) { } else if (isReal()) {
QTC::TC("qpdf", "QPDFObjectHandle clone real"); QTC::TC("qpdf", "QPDFObjectHandle clone real");
new_obj = PointerHolder<QPDFObject>(new QPDF_Real(getRealValue())); new_obj = std::shared_ptr<QPDFObject>(new QPDF_Real(getRealValue()));
} else if (isName()) { } else if (isName()) {
QTC::TC("qpdf", "QPDFObjectHandle clone name"); QTC::TC("qpdf", "QPDFObjectHandle clone name");
new_obj = PointerHolder<QPDFObject>(new QPDF_Name(getName())); new_obj = std::shared_ptr<QPDFObject>(new QPDF_Name(getName()));
} else if (isString()) { } else if (isString()) {
QTC::TC("qpdf", "QPDFObjectHandle clone string"); QTC::TC("qpdf", "QPDFObjectHandle clone string");
new_obj = PointerHolder<QPDFObject>(new QPDF_String(getStringValue())); new_obj =
std::shared_ptr<QPDFObject>(new QPDF_String(getStringValue()));
} else if (isArray()) { } else if (isArray()) {
QTC::TC("qpdf", "QPDFObjectHandle clone array"); QTC::TC("qpdf", "QPDFObjectHandle clone array");
std::vector<QPDFObjectHandle> items; std::vector<QPDFObjectHandle> items;
@ -2868,7 +2869,7 @@ QPDFObjectHandle::copyObject(
visited, cross_indirect, first_level_only, stop_at_streams); visited, cross_indirect, first_level_only, stop_at_streams);
} }
} }
new_obj = PointerHolder<QPDFObject>(new QPDF_Array(items)); new_obj = std::shared_ptr<QPDFObject>(new QPDF_Array(items));
} else if (isDictionary()) { } else if (isDictionary()) {
QTC::TC("qpdf", "QPDFObjectHandle clone dictionary"); QTC::TC("qpdf", "QPDFObjectHandle clone dictionary");
std::set<std::string> keys = getKeys(); std::set<std::string> keys = getKeys();
@ -2883,7 +2884,7 @@ QPDFObjectHandle::copyObject(
visited, cross_indirect, first_level_only, stop_at_streams); visited, cross_indirect, first_level_only, stop_at_streams);
} }
} }
new_obj = PointerHolder<QPDFObject>(new QPDF_Dictionary(items)); new_obj = std::shared_ptr<QPDFObject>(new QPDF_Dictionary(items));
} else { } else {
throw std::logic_error("QPDFObjectHandle::makeDirectInternal: " throw std::logic_error("QPDFObjectHandle::makeDirectInternal: "
"unknown object type"); "unknown object type");
@ -3172,12 +3173,12 @@ QPDFObjectHandle::dereference()
this->obj = nullptr; this->obj = nullptr;
} }
if (this->obj.get() == 0) { if (this->obj.get() == 0) {
PointerHolder<QPDFObject> obj = std::shared_ptr<QPDFObject> obj =
QPDF::Resolver::resolve(this->qpdf, this->objid, this->generation); QPDF::Resolver::resolve(this->qpdf, this->objid, this->generation);
if (obj.get() == 0) { if (obj.get() == 0) {
// QPDF::resolve never returns an uninitialized object, but // QPDF::resolve never returns an uninitialized object, but
// check just in case. // check just in case.
this->obj = PointerHolder<QPDFObject>(new QPDF_Null()); this->obj = std::shared_ptr<QPDFObject>(new QPDF_Null());
} else if (dynamic_cast<QPDF_Reserved*>(obj.get())) { } else if (dynamic_cast<QPDF_Reserved*>(obj.get())) {
// Do not resolve // Do not resolve
} else { } else {

View File

@ -100,7 +100,7 @@ QPDFOutlineDocumentHelper::resolveNamedDest(QPDFObjectHandle name)
QPDFObjectHandle dests = names.getKey("/Dests"); QPDFObjectHandle dests = names.getKey("/Dests");
if (dests.isDictionary()) { if (dests.isDictionary()) {
this->m->names_dest = this->m->names_dest =
make_pointer_holder<QPDFNameTreeObjectHelper>( std::make_shared<QPDFNameTreeObjectHelper>(
dests, this->qpdf); dests, this->qpdf);
} }
} }

View File

@ -31,13 +31,13 @@ QPDFOutlineObjectHelper::QPDFOutlineObjectHelper(
QPDFObjectHandle cur = oh.getKey("/First"); QPDFObjectHandle cur = oh.getKey("/First");
while (!cur.isNull()) { while (!cur.isNull()) {
QPDFOutlineObjectHelper new_ooh(cur, dh, 1 + depth); QPDFOutlineObjectHelper new_ooh(cur, dh, 1 + depth);
new_ooh.m->parent = make_pointer_holder<QPDFOutlineObjectHelper>(*this); new_ooh.m->parent = std::make_shared<QPDFOutlineObjectHelper>(*this);
this->m->kids.push_back(new_ooh); this->m->kids.push_back(new_ooh);
cur = cur.getKey("/Next"); cur = cur.getKey("/Next");
} }
} }
PointerHolder<QPDFOutlineObjectHelper> std::shared_ptr<QPDFOutlineObjectHelper>
QPDFOutlineObjectHelper::getParent() QPDFOutlineObjectHelper::getParent()
{ {
return this->m->parent; return this->m->parent;

View File

@ -16,7 +16,7 @@ QPDFPageLabelDocumentHelper::QPDFPageLabelDocumentHelper(QPDF& qpdf) :
{ {
QPDFObjectHandle root = qpdf.getRoot(); QPDFObjectHandle root = qpdf.getRoot();
if (root.hasKey("/PageLabels")) { if (root.hasKey("/PageLabels")) {
this->m->labels = make_pointer_holder<QPDFNumberTreeObjectHelper>( this->m->labels = std::make_shared<QPDFNumberTreeObjectHelper>(
root.getKey("/PageLabels"), this->qpdf); root.getKey("/PageLabels"), this->qpdf);
} }
} }

View File

@ -556,7 +556,7 @@ QPDFPageObjectHelper::pipeContents(Pipeline* p)
void void
QPDFPageObjectHelper::addContentTokenFilter( QPDFPageObjectHelper::addContentTokenFilter(
PointerHolder<QPDFObjectHandle::TokenFilter> token_filter) std::shared_ptr<QPDFObjectHandle::TokenFilter> token_filter)
{ {
if (this->oh.isFormXObject()) { if (this->oh.isFormXObject()) {
this->oh.addTokenFilter(token_filter); this->oh.addTokenFilter(token_filter);
@ -776,7 +776,7 @@ QPDFPageObjectHelper::getFormXObjectForPage(bool handle_transformations)
" XObject created from page will not work"); " XObject created from page will not work");
} }
newdict.replaceKey("/BBox", bbox); newdict.replaceKey("/BBox", bbox);
auto provider = PointerHolder<QPDFObjectHandle::StreamDataProvider>( auto provider = std::shared_ptr<QPDFObjectHandle::StreamDataProvider>(
new ContentProvider(this->oh)); new ContentProvider(this->oh));
result.replaceStreamData( result.replaceStreamData(
provider, QPDFObjectHandle::newNull(), QPDFObjectHandle::newNull()); provider, QPDFObjectHandle::newNull(), QPDFObjectHandle::newNull());
@ -1060,9 +1060,9 @@ QPDFPageObjectHelper::flattenRotation(QPDFAcroFormDocumentHelper* afdh)
std::vector<QPDFObjectHandle> new_annots; std::vector<QPDFObjectHandle> new_annots;
std::vector<QPDFObjectHandle> new_fields; std::vector<QPDFObjectHandle> new_fields;
std::set<QPDFObjGen> old_fields; std::set<QPDFObjGen> old_fields;
PointerHolder<QPDFAcroFormDocumentHelper> afdhph; std::shared_ptr<QPDFAcroFormDocumentHelper> afdhph;
if (!afdh) { if (!afdh) {
afdhph = make_pointer_holder<QPDFAcroFormDocumentHelper>(*qpdf); afdhph = std::make_shared<QPDFAcroFormDocumentHelper>(*qpdf);
afdh = afdhph.get(); afdh = afdhph.get();
} }
afdh->transformAnnotations( afdh->transformAnnotations(
@ -1101,10 +1101,10 @@ QPDFPageObjectHelper::copyAnnotations(
std::vector<QPDFObjectHandle> new_annots; std::vector<QPDFObjectHandle> new_annots;
std::vector<QPDFObjectHandle> new_fields; std::vector<QPDFObjectHandle> new_fields;
std::set<QPDFObjGen> old_fields; std::set<QPDFObjGen> old_fields;
PointerHolder<QPDFAcroFormDocumentHelper> afdhph; std::shared_ptr<QPDFAcroFormDocumentHelper> afdhph;
PointerHolder<QPDFAcroFormDocumentHelper> from_afdhph; std::shared_ptr<QPDFAcroFormDocumentHelper> from_afdhph;
if (!afdh) { if (!afdh) {
afdhph = make_pointer_holder<QPDFAcroFormDocumentHelper>(*this_qpdf); afdhph = std::make_shared<QPDFAcroFormDocumentHelper>(*this_qpdf);
afdh = afdhph.get(); afdh = afdhph.get();
} }
if (this_qpdf == from_qpdf) { if (this_qpdf == from_qpdf) {
@ -1116,8 +1116,7 @@ QPDFPageObjectHelper::copyAnnotations(
" is not from the same QPDF as from_page"); " is not from the same QPDF as from_page");
} }
} else { } else {
from_afdhph = from_afdhph = std::make_shared<QPDFAcroFormDocumentHelper>(*from_qpdf);
make_pointer_holder<QPDFAcroFormDocumentHelper>(*from_qpdf);
from_afdh = from_afdhph.get(); from_afdh = from_afdhph.get();
} }

View File

@ -23,7 +23,8 @@ is_delimiter(char ch)
class QPDFWordTokenFinder: public InputSource::Finder class QPDFWordTokenFinder: public InputSource::Finder
{ {
public: public:
QPDFWordTokenFinder(PointerHolder<InputSource> is, std::string const& str) : QPDFWordTokenFinder(
std::shared_ptr<InputSource> is, std::string const& str) :
is(is), is(is),
str(str) str(str)
{ {
@ -34,7 +35,7 @@ class QPDFWordTokenFinder: public InputSource::Finder
virtual bool check(); virtual bool check();
private: private:
PointerHolder<InputSource> is; std::shared_ptr<InputSource> is;
std::string str; std::string str;
}; };
@ -503,7 +504,7 @@ QPDFTokenizer::presentEOF()
} }
void void
QPDFTokenizer::expectInlineImage(PointerHolder<InputSource> input) QPDFTokenizer::expectInlineImage(std::shared_ptr<InputSource> input)
{ {
if (this->m->state != st_top) { if (this->m->state != st_top) {
throw std::logic_error("QPDFTokenizer::expectInlineImage called" throw std::logic_error("QPDFTokenizer::expectInlineImage called"
@ -514,7 +515,7 @@ QPDFTokenizer::expectInlineImage(PointerHolder<InputSource> input)
} }
void void
QPDFTokenizer::findEI(PointerHolder<InputSource> input) QPDFTokenizer::findEI(std::shared_ptr<InputSource> input)
{ {
if (!input.get()) { if (!input.get()) {
return; return;
@ -645,7 +646,7 @@ QPDFTokenizer::betweenTokens()
QPDFTokenizer::Token QPDFTokenizer::Token
QPDFTokenizer::readToken( QPDFTokenizer::readToken(
PointerHolder<InputSource> input, std::shared_ptr<InputSource> input,
std::string const& context, std::string const& context,
bool allow_bad, bool allow_bad,
size_t max_len) size_t max_len)

View File

@ -153,10 +153,10 @@ QPDFWriter::getBuffer()
return result; return result;
} }
PointerHolder<Buffer> std::shared_ptr<Buffer>
QPDFWriter::getBufferSharedPointer() QPDFWriter::getBufferSharedPointer()
{ {
return PointerHolder<Buffer>(getBuffer()); return std::shared_ptr<Buffer>(getBuffer());
} }
void void
@ -1081,7 +1081,7 @@ QPDFWriter::writeString(std::string const& str)
} }
void void
QPDFWriter::writeBuffer(PointerHolder<Buffer>& b) QPDFWriter::writeBuffer(std::shared_ptr<Buffer>& b)
{ {
this->m->pipeline->write(b->getBuffer(), b->getSize()); this->m->pipeline->write(b->getBuffer(), b->getSize());
} }
@ -1485,7 +1485,7 @@ QPDFWriter::willFilterStream(
QPDFObjectHandle stream, QPDFObjectHandle stream,
bool& compress_stream, bool& compress_stream,
bool& is_metadata, bool& is_metadata,
PointerHolder<Buffer>* stream_data) std::shared_ptr<Buffer>* stream_data)
{ {
compress_stream = false; compress_stream = false;
is_metadata = false; is_metadata = false;
@ -1819,7 +1819,7 @@ QPDFWriter::unparseObject(
flags |= f_stream; flags |= f_stream;
bool compress_stream = false; bool compress_stream = false;
bool is_metadata = false; bool is_metadata = false;
PointerHolder<Buffer> stream_data; std::shared_ptr<Buffer> stream_data;
if (willFilterStream( if (willFilterStream(
object, compress_stream, is_metadata, &stream_data)) { object, compress_stream, is_metadata, &stream_data)) {
flags |= f_filtered; flags |= f_filtered;
@ -1924,7 +1924,7 @@ QPDFWriter::writeObjectStream(QPDFObjectHandle object)
// Generate stream itself. We have to do this in two passes so we // Generate stream itself. We have to do this in two passes so we
// can calculate offsets in the first pass. // can calculate offsets in the first pass.
PointerHolder<Buffer> stream_buffer; std::shared_ptr<Buffer> stream_buffer;
int first_obj = -1; int first_obj = -1;
bool compressed = false; bool compressed = false;
for (int pass = 1; pass <= 2; ++pass) { for (int pass = 1; pass <= 2; ++pass) {
@ -2667,7 +2667,7 @@ QPDFWriter::writeHeader()
void void
QPDFWriter::writeHintStream(int hint_id) QPDFWriter::writeHintStream(int hint_id)
{ {
PointerHolder<Buffer> hint_buffer; std::shared_ptr<Buffer> hint_buffer;
int S = 0; int S = 0;
int O = 0; int O = 0;
QPDF::Writer::generateHintStream( QPDF::Writer::generateHintStream(
@ -2839,7 +2839,7 @@ QPDFWriter::writeXRefStream(
p = pushPipeline( p = pushPipeline(
new Pl_PNGFilter("pngify xref", p, Pl_PNGFilter::a_encode, esize)); new Pl_PNGFilter("pngify xref", p, Pl_PNGFilter::a_encode, esize));
} }
PointerHolder<Buffer> xref_data; std::shared_ptr<Buffer> xref_data;
{ {
PipelinePopper pp_xref(this, &xref_data); PipelinePopper pp_xref(this, &xref_data);
activatePipelineStack(pp_xref); activatePipelineStack(pp_xref);
@ -3098,13 +3098,13 @@ QPDFWriter::writeLinearized()
} }
qpdf_offset_t hint_length = 0; qpdf_offset_t hint_length = 0;
PointerHolder<Buffer> hint_buffer; std::shared_ptr<Buffer> hint_buffer;
// Write file in two passes. Part numbers refer to PDF spec 1.4. // Write file in two passes. Part numbers refer to PDF spec 1.4.
FILE* lin_pass1_file = 0; FILE* lin_pass1_file = 0;
auto pp_pass1 = make_pointer_holder<PipelinePopper>(this); auto pp_pass1 = std::make_shared<PipelinePopper>(this);
auto pp_md5 = make_pointer_holder<PipelinePopper>(this); auto pp_md5 = std::make_shared<PipelinePopper>(this);
for (int pass = 1; pass <= 2; ++pass) { for (int pass = 1; pass <= 2; ++pass) {
if (pass == 1) { if (pass == 1) {
if (!this->m->lin_pass1_filename.empty()) { if (!this->m->lin_pass1_filename.empty()) {
@ -3489,7 +3489,7 @@ QPDFWriter::indicateProgress(bool decrement, bool finished)
} }
void void
QPDFWriter::registerProgressReporter(PointerHolder<ProgressReporter> pr) QPDFWriter::registerProgressReporter(std::shared_ptr<ProgressReporter> pr)
{ {
this->m->progress_reporter = pr; this->m->progress_reporter = pr;
} }
@ -3497,7 +3497,7 @@ QPDFWriter::registerProgressReporter(PointerHolder<ProgressReporter> pr)
void void
QPDFWriter::writeStandard() QPDFWriter::writeStandard()
{ {
auto pp_md5 = make_pointer_holder<PipelinePopper>(this); auto pp_md5 = std::make_shared<PipelinePopper>(this);
if (this->m->deterministic_id) { if (this->m->deterministic_id) {
pushMD5Pipeline(*pp_md5); pushMD5Pipeline(*pp_md5);
} }

View File

@ -221,19 +221,19 @@ QPDF_Stream::getLength() const
return this->length; return this->length;
} }
PointerHolder<Buffer> std::shared_ptr<Buffer>
QPDF_Stream::getStreamDataBuffer() const QPDF_Stream::getStreamDataBuffer() const
{ {
return this->stream_data; return this->stream_data;
} }
PointerHolder<QPDFObjectHandle::StreamDataProvider> std::shared_ptr<QPDFObjectHandle::StreamDataProvider>
QPDF_Stream::getStreamDataProvider() const QPDF_Stream::getStreamDataProvider() const
{ {
return this->stream_provider; return this->stream_provider;
} }
PointerHolder<Buffer> std::shared_ptr<Buffer>
QPDF_Stream::getStreamData(qpdf_stream_decode_level_e decode_level) QPDF_Stream::getStreamData(qpdf_stream_decode_level_e decode_level)
{ {
Pl_Buffer buf("stream data buffer"); Pl_Buffer buf("stream data buffer");
@ -251,7 +251,7 @@ QPDF_Stream::getStreamData(qpdf_stream_decode_level_e decode_level)
return buf.getBufferSharedPointer(); return buf.getBufferSharedPointer();
} }
PointerHolder<Buffer> std::shared_ptr<Buffer>
QPDF_Stream::getRawStreamData() QPDF_Stream::getRawStreamData()
{ {
Pl_Buffer buf("stream data buffer"); Pl_Buffer buf("stream data buffer");
@ -438,7 +438,7 @@ QPDF_Stream::pipeStreamData(
// objects. // objects.
std::vector<std::shared_ptr<Pipeline>> to_delete; std::vector<std::shared_ptr<Pipeline>> to_delete;
PointerHolder<ContentNormalizer> normalizer; std::shared_ptr<ContentNormalizer> normalizer;
std::shared_ptr<Pipeline> new_pipeline; std::shared_ptr<Pipeline> new_pipeline;
if (filter) { if (filter) {
if (encode_flags & qpdf_ef_compress) { if (encode_flags & qpdf_ef_compress) {
@ -449,7 +449,7 @@ QPDF_Stream::pipeStreamData(
} }
if (encode_flags & qpdf_ef_normalize) { if (encode_flags & qpdf_ef_normalize) {
normalizer = make_pointer_holder<ContentNormalizer>(); normalizer = std::make_shared<ContentNormalizer>();
new_pipeline = std::make_shared<Pl_QPDFTokenizer>( new_pipeline = std::make_shared<Pl_QPDFTokenizer>(
"normalizer", normalizer.get(), pipeline); "normalizer", normalizer.get(), pipeline);
to_delete.push_back(new_pipeline); to_delete.push_back(new_pipeline);
@ -586,7 +586,7 @@ QPDF_Stream::pipeStreamData(
void void
QPDF_Stream::replaceStreamData( QPDF_Stream::replaceStreamData(
PointerHolder<Buffer> data, std::shared_ptr<Buffer> data,
QPDFObjectHandle const& filter, QPDFObjectHandle const& filter,
QPDFObjectHandle const& decode_parms) QPDFObjectHandle const& decode_parms)
{ {
@ -597,7 +597,7 @@ QPDF_Stream::replaceStreamData(
void void
QPDF_Stream::replaceStreamData( QPDF_Stream::replaceStreamData(
PointerHolder<QPDFObjectHandle::StreamDataProvider> provider, std::shared_ptr<QPDFObjectHandle::StreamDataProvider> provider,
QPDFObjectHandle const& filter, QPDFObjectHandle const& filter,
QPDFObjectHandle const& decode_parms) QPDFObjectHandle const& decode_parms)
{ {
@ -608,7 +608,7 @@ QPDF_Stream::replaceStreamData(
void void
QPDF_Stream::addTokenFilter( QPDF_Stream::addTokenFilter(
PointerHolder<QPDFObjectHandle::TokenFilter> token_filter) std::shared_ptr<QPDFObjectHandle::TokenFilter> token_filter)
{ {
this->token_filters.push_back(token_filter); this->token_filters.push_back(token_filter);
} }

View File

@ -754,7 +754,8 @@ QPDF::recover_encryption_key_with_password(
} }
QPDF::encryption_method_e QPDF::encryption_method_e
QPDF::interpretCF(PointerHolder<EncryptionParameters> encp, QPDFObjectHandle cf) QPDF::interpretCF(
std::shared_ptr<EncryptionParameters> encp, QPDFObjectHandle cf)
{ {
if (cf.isName()) { if (cf.isName()) {
std::string filter = cf.getName(); std::string filter = cf.getName();
@ -1079,7 +1080,7 @@ QPDF::initializeEncryption()
std::string std::string
QPDF::getKeyForObject( QPDF::getKeyForObject(
PointerHolder<EncryptionParameters> encp, std::shared_ptr<EncryptionParameters> encp,
int objid, int objid,
int generation, int generation,
bool use_aes) bool use_aes)
@ -1165,7 +1166,7 @@ QPDF::decryptString(std::string& str, int objid, int generation)
} else { } else {
QTC::TC("qpdf", "QPDF_encryption rc4 decode string"); QTC::TC("qpdf", "QPDF_encryption rc4 decode string");
size_t vlen = str.length(); size_t vlen = str.length();
// Using PointerHolder guarantees that tmp will // Using std::shared_ptr guarantees that tmp will
// be freed even if rc4.process throws an exception. // be freed even if rc4.process throws an exception.
auto tmp = QUtil::make_unique_cstr(str); auto tmp = QUtil::make_unique_cstr(str);
RC4 rc4(QUtil::unsigned_char_pointer(key), toI(key.length())); RC4 rc4(QUtil::unsigned_char_pointer(key), toI(key.length()));
@ -1188,8 +1189,8 @@ QPDF::decryptString(std::string& str, int objid, int generation)
void void
QPDF::decryptStream( QPDF::decryptStream(
PointerHolder<EncryptionParameters> encp, std::shared_ptr<EncryptionParameters> encp,
PointerHolder<InputSource> file, std::shared_ptr<InputSource> file,
QPDF& qpdf_for_warning, QPDF& qpdf_for_warning,
Pipeline*& pipeline, Pipeline*& pipeline,
int objid, int objid,

View File

@ -2120,7 +2120,7 @@ QPDF::generateHintStream(
std::map<int, QPDFXRefEntry> const& xref, std::map<int, QPDFXRefEntry> const& xref,
std::map<int, qpdf_offset_t> const& lengths, std::map<int, qpdf_offset_t> const& lengths,
std::map<int, int> const& obj_renumber, std::map<int, int> const& obj_renumber,
PointerHolder<Buffer>& hint_buffer, std::shared_ptr<Buffer>& hint_buffer,
int& S, int& S,
int& O) int& O)
{ {

View File

@ -445,7 +445,7 @@ QUtil::os_wrapper(std::string const& description, int status)
} }
#ifdef _WIN32 #ifdef _WIN32
static PointerHolder<wchar_t> static std::shared_ptr<wchar_t>
win_convert_filename(char const* filename) win_convert_filename(char const* filename)
{ {
// Convert the utf-8 encoded filename argument to wchar_t*. First, // Convert the utf-8 encoded filename argument to wchar_t*. First,
@ -454,7 +454,7 @@ win_convert_filename(char const* filename)
std::string u16 = QUtil::utf8_to_utf16(filename); std::string u16 = QUtil::utf8_to_utf16(filename);
size_t len = u16.length(); size_t len = u16.length();
size_t wlen = (len / 2) - 1; size_t wlen = (len / 2) - 1;
PointerHolder<wchar_t> wfilenamep(true, new wchar_t[wlen + 1]); auto wfilenamep = QUtil::make_shared_array<wchar_t>(wlen + 1);
wchar_t* wfilename = wfilenamep.get(); wchar_t* wfilename = wfilenamep.get();
wfilename[wlen] = 0; wfilename[wlen] = 0;
for (unsigned int i = 2; i < len; i += 2) { for (unsigned int i = 2; i < len; i += 2) {
@ -471,9 +471,9 @@ QUtil::safe_fopen(char const* filename, char const* mode)
{ {
FILE* f = 0; FILE* f = 0;
#ifdef _WIN32 #ifdef _WIN32
PointerHolder<wchar_t> wfilenamep = win_convert_filename(filename); std::shared_ptr<wchar_t> wfilenamep = win_convert_filename(filename);
wchar_t* wfilename = wfilenamep.get(); wchar_t* wfilename = wfilenamep.get();
PointerHolder<wchar_t> wmodep(true, new wchar_t[strlen(mode) + 1]); auto wmodep = QUtil::make_shared_array<wchar_t>(strlen(mode) + 1);
wchar_t* wmode = wmodep.get(); wchar_t* wmode = wmodep.get();
wmode[strlen(mode)] = 0; wmode[strlen(mode)] = 0;
for (size_t i = 0; i < strlen(mode); ++i) { for (size_t i = 0; i < strlen(mode); ++i) {
@ -612,7 +612,7 @@ void
QUtil::remove_file(char const* path) QUtil::remove_file(char const* path)
{ {
#ifdef _WIN32 #ifdef _WIN32
PointerHolder<wchar_t> wpath = win_convert_filename(path); std::shared_ptr<wchar_t> wpath = win_convert_filename(path);
os_wrapper(std::string("remove ") + path, _wunlink(wpath.get())); os_wrapper(std::string("remove ") + path, _wunlink(wpath.get()));
#else #else
os_wrapper(std::string("remove ") + path, unlink(path)); os_wrapper(std::string("remove ") + path, unlink(path));
@ -628,8 +628,8 @@ QUtil::rename_file(char const* oldname, char const* newname)
} catch (QPDFSystemError&) { } catch (QPDFSystemError&) {
// ignore // ignore
} }
PointerHolder<wchar_t> wold = win_convert_filename(oldname); std::shared_ptr<wchar_t> wold = win_convert_filename(oldname);
PointerHolder<wchar_t> wnew = win_convert_filename(newname); std::shared_ptr<wchar_t> wnew = win_convert_filename(newname);
os_wrapper( os_wrapper(
std::string("rename ") + oldname + " " + newname, std::string("rename ") + oldname + " " + newname,
_wrename(wold.get(), wnew.get())); _wrename(wold.get(), wnew.get()));
@ -824,7 +824,7 @@ QUtil::get_env(std::string const& var, std::string* value)
} }
if (value) { if (value) {
PointerHolder<char> t = PointerHolder<char>(true, new char[len + 1]); auto t = QUtil::make_shared_array<char>(len + 1);
::GetEnvironmentVariable(var.c_str(), t.get(), len); ::GetEnvironmentVariable(var.c_str(), t.get(), len);
*value = t.get(); *value = t.get();
} }
@ -1173,14 +1173,14 @@ QUtil::is_number(char const* p)
void void
QUtil::read_file_into_memory( QUtil::read_file_into_memory(
char const* filename, PointerHolder<char>& file_buf, size_t& size) char const* filename, std::shared_ptr<char>& file_buf, size_t& size)
{ {
FILE* f = safe_fopen(filename, "rb"); FILE* f = safe_fopen(filename, "rb");
FileCloser fc(f); FileCloser fc(f);
fseek(f, 0, SEEK_END); fseek(f, 0, SEEK_END);
size = QIntC::to_size(QUtil::tell(f)); size = QIntC::to_size(QUtil::tell(f));
fseek(f, 0, SEEK_SET); fseek(f, 0, SEEK_SET);
file_buf = make_array_pointer_holder<char>(size); file_buf = QUtil::make_shared_array<char>(size);
char* buf_p = file_buf.get(); char* buf_p = file_buf.get();
size_t bytes_read = 0; size_t bytes_read = 0;
size_t len = 0; size_t len = 0;

View File

@ -18,7 +18,7 @@
struct _qpdf_error struct _qpdf_error
{ {
PointerHolder<QPDFExc> exc; std::shared_ptr<QPDFExc> exc;
}; };
struct _qpdf_data struct _qpdf_data
@ -26,10 +26,10 @@ struct _qpdf_data
_qpdf_data(); _qpdf_data();
~_qpdf_data(); ~_qpdf_data();
PointerHolder<QPDF> qpdf; std::shared_ptr<QPDF> qpdf;
PointerHolder<QPDFWriter> qpdf_writer; std::shared_ptr<QPDFWriter> qpdf_writer;
PointerHolder<QPDFExc> error; std::shared_ptr<QPDFExc> error;
_qpdf_error tmp_error; _qpdf_error tmp_error;
std::list<QPDFExc> warnings; std::list<QPDFExc> warnings;
std::string tmp_string; std::string tmp_string;
@ -40,12 +40,12 @@ struct _qpdf_data
unsigned long long size; unsigned long long size;
char const* password; char const* password;
bool write_memory; bool write_memory;
PointerHolder<Buffer> output_buffer; std::shared_ptr<Buffer> output_buffer;
// QPDFObjectHandle support // QPDFObjectHandle support
bool silence_errors; bool silence_errors;
bool oh_error_occurred; bool oh_error_occurred;
std::map<qpdf_oh, PointerHolder<QPDFObjectHandle>> oh_cache; std::map<qpdf_oh, std::shared_ptr<QPDFObjectHandle>> oh_cache;
qpdf_oh next_oh; qpdf_oh next_oh;
std::set<std::string> cur_iter_dict_keys; std::set<std::string> cur_iter_dict_keys;
std::set<std::string>::const_iterator dict_iter; std::set<std::string>::const_iterator dict_iter;
@ -111,13 +111,13 @@ static void
call_init_write(qpdf_data qpdf) call_init_write(qpdf_data qpdf)
{ {
qpdf->qpdf_writer = qpdf->qpdf_writer =
make_pointer_holder<QPDFWriter>(*(qpdf->qpdf), qpdf->filename); std::make_shared<QPDFWriter>(*(qpdf->qpdf), qpdf->filename);
} }
static void static void
call_init_write_memory(qpdf_data qpdf) call_init_write_memory(qpdf_data qpdf)
{ {
qpdf->qpdf_writer = make_pointer_holder<QPDFWriter>(*(qpdf->qpdf)); qpdf->qpdf_writer = std::make_shared<QPDFWriter>(*(qpdf->qpdf));
qpdf->qpdf_writer->setOutputMemory(); qpdf->qpdf_writer->setOutputMemory();
} }
@ -144,15 +144,15 @@ trap_errors(qpdf_data qpdf, std::function<void(qpdf_data)> fn)
try { try {
fn(qpdf); fn(qpdf);
} catch (QPDFExc& e) { } catch (QPDFExc& e) {
qpdf->error = make_pointer_holder<QPDFExc>(e); qpdf->error = std::make_shared<QPDFExc>(e);
status |= QPDF_ERRORS; status |= QPDF_ERRORS;
} catch (std::runtime_error& e) { } catch (std::runtime_error& e) {
qpdf->error = qpdf->error =
make_pointer_holder<QPDFExc>(qpdf_e_system, "", "", 0, e.what()); std::make_shared<QPDFExc>(qpdf_e_system, "", "", 0, e.what());
status |= QPDF_ERRORS; status |= QPDF_ERRORS;
} catch (std::exception& e) { } catch (std::exception& e) {
qpdf->error = qpdf->error =
make_pointer_holder<QPDFExc>(qpdf_e_internal, "", "", 0, e.what()); std::make_shared<QPDFExc>(qpdf_e_internal, "", "", 0, e.what());
status |= QPDF_ERRORS; status |= QPDF_ERRORS;
} }
@ -175,7 +175,7 @@ qpdf_init()
{ {
QTC::TC("qpdf", "qpdf-c called qpdf_init"); QTC::TC("qpdf", "qpdf-c called qpdf_init");
qpdf_data qpdf = new _qpdf_data(); qpdf_data qpdf = new _qpdf_data();
qpdf->qpdf = make_pointer_holder<QPDF>(); qpdf->qpdf = std::make_shared<QPDF>();
return qpdf; return qpdf;
} }
@ -241,8 +241,7 @@ qpdf_error
qpdf_next_warning(qpdf_data qpdf) qpdf_next_warning(qpdf_data qpdf)
{ {
if (qpdf_more_warnings(qpdf)) { if (qpdf_more_warnings(qpdf)) {
qpdf->tmp_error.exc = qpdf->tmp_error.exc = std::make_shared<QPDFExc>(qpdf->warnings.front());
make_pointer_holder<QPDFExc>(qpdf->warnings.front());
qpdf->warnings.pop_front(); qpdf->warnings.pop_front();
QTC::TC("qpdf", "qpdf-c qpdf_next_warning returned warning"); QTC::TC("qpdf", "qpdf-c qpdf_next_warning returned warning");
return &qpdf->tmp_error; return &qpdf->tmp_error;
@ -974,7 +973,7 @@ qpdf_register_progress_reporter(
{ {
QTC::TC("qpdf", "qpdf-c registered progress reporter"); QTC::TC("qpdf", "qpdf-c registered progress reporter");
qpdf->qpdf_writer->registerProgressReporter( qpdf->qpdf_writer->registerProgressReporter(
PointerHolder<QPDFWriter::ProgressReporter>( std::shared_ptr<QPDFWriter::ProgressReporter>(
new ProgressReporter(report_progress, data))); new ProgressReporter(report_progress, data)));
} }
@ -1035,7 +1034,7 @@ static qpdf_oh
new_object(qpdf_data qpdf, QPDFObjectHandle const& qoh) new_object(qpdf_data qpdf, QPDFObjectHandle const& qoh)
{ {
qpdf_oh oh = ++qpdf->next_oh; // never return 0 qpdf_oh oh = ++qpdf->next_oh; // never return 0
qpdf->oh_cache[oh] = make_pointer_holder<QPDFObjectHandle>(qoh); qpdf->oh_cache[oh] = std::make_shared<QPDFObjectHandle>(qoh);
return oh; return oh;
} }

View File

@ -125,7 +125,7 @@ class JSONHandler
Handlers h; Handlers h;
}; };
PointerHolder<Members> m; std::shared_ptr<Members> m;
}; };
#endif // JSONHANDLER_HH #endif // JSONHANDLER_HH

View File

@ -10,7 +10,8 @@
class OffsetInputSource: public InputSource class OffsetInputSource: public InputSource
{ {
public: public:
OffsetInputSource(PointerHolder<InputSource>, qpdf_offset_t global_offset); OffsetInputSource(
std::shared_ptr<InputSource>, qpdf_offset_t global_offset);
virtual ~OffsetInputSource(); virtual ~OffsetInputSource();
virtual qpdf_offset_t findAndSkipNextEOL(); virtual qpdf_offset_t findAndSkipNextEOL();
@ -22,7 +23,7 @@ class OffsetInputSource: public InputSource
virtual void unreadCh(char ch); virtual void unreadCh(char ch);
private: private:
PointerHolder<InputSource> proxied; std::shared_ptr<InputSource> proxied;
qpdf_offset_t global_offset; qpdf_offset_t global_offset;
qpdf_offset_t max_safe_offset; qpdf_offset_t max_safe_offset;
}; };

View File

@ -46,8 +46,8 @@ class Pl_PNGFilter: public Pipeline
unsigned int bytes_per_pixel; unsigned int bytes_per_pixel;
unsigned char* cur_row; // points to buf1 or buf2 unsigned char* cur_row; // points to buf1 or buf2
unsigned char* prev_row; // points to buf1 or buf2 unsigned char* prev_row; // points to buf1 or buf2
PointerHolder<unsigned char> buf1; std::shared_ptr<unsigned char> buf1;
PointerHolder<unsigned char> buf2; std::shared_ptr<unsigned char> buf2;
size_t pos; size_t pos;
size_t incoming; size_t incoming;
}; };

View File

@ -27,7 +27,7 @@ class Pl_RC4: public Pipeline
virtual void finish(); virtual void finish();
private: private:
PointerHolder<unsigned char> outbuf; std::shared_ptr<unsigned char> outbuf;
size_t out_bufsize; size_t out_bufsize;
RC4 rc4; RC4 rc4;
}; };

View File

@ -35,7 +35,7 @@ class Pl_TIFFPredictor: public Pipeline
unsigned int bytes_per_row; unsigned int bytes_per_row;
unsigned int samples_per_pixel; unsigned int samples_per_pixel;
unsigned int bits_per_sample; unsigned int bits_per_sample;
PointerHolder<unsigned char> cur_row; std::shared_ptr<unsigned char> cur_row;
size_t pos; size_t pos;
}; };

View File

@ -37,8 +37,8 @@ class QPDF_Stream: public QPDFObject
// Methods to help QPDF copy foreign streams // Methods to help QPDF copy foreign streams
qpdf_offset_t getOffset() const; qpdf_offset_t getOffset() const;
size_t getLength() const; size_t getLength() const;
PointerHolder<Buffer> getStreamDataBuffer() const; std::shared_ptr<Buffer> getStreamDataBuffer() const;
PointerHolder<QPDFObjectHandle::StreamDataProvider> std::shared_ptr<QPDFObjectHandle::StreamDataProvider>
getStreamDataProvider() const; getStreamDataProvider() const;
// See comments in QPDFObjectHandle.hh for these methods. // See comments in QPDFObjectHandle.hh for these methods.
@ -49,18 +49,18 @@ class QPDF_Stream: public QPDFObject
qpdf_stream_decode_level_e decode_level, qpdf_stream_decode_level_e decode_level,
bool suppress_warnings, bool suppress_warnings,
bool will_retry); bool will_retry);
PointerHolder<Buffer> getStreamData(qpdf_stream_decode_level_e); std::shared_ptr<Buffer> getStreamData(qpdf_stream_decode_level_e);
PointerHolder<Buffer> getRawStreamData(); std::shared_ptr<Buffer> getRawStreamData();
void replaceStreamData( void replaceStreamData(
PointerHolder<Buffer> data, std::shared_ptr<Buffer> data,
QPDFObjectHandle const& filter, QPDFObjectHandle const& filter,
QPDFObjectHandle const& decode_parms); QPDFObjectHandle const& decode_parms);
void replaceStreamData( void replaceStreamData(
PointerHolder<QPDFObjectHandle::StreamDataProvider> provider, std::shared_ptr<QPDFObjectHandle::StreamDataProvider> provider,
QPDFObjectHandle const& filter, QPDFObjectHandle const& filter,
QPDFObjectHandle const& decode_parms); QPDFObjectHandle const& decode_parms);
void void
addTokenFilter(PointerHolder<QPDFObjectHandle::TokenFilter> token_filter); addTokenFilter(std::shared_ptr<QPDFObjectHandle::TokenFilter> token_filter);
void replaceDict(QPDFObjectHandle new_dict); void replaceDict(QPDFObjectHandle new_dict);
@ -101,9 +101,9 @@ class QPDF_Stream: public QPDFObject
QPDFObjectHandle stream_dict; QPDFObjectHandle stream_dict;
qpdf_offset_t offset; qpdf_offset_t offset;
size_t length; size_t length;
PointerHolder<Buffer> stream_data; std::shared_ptr<Buffer> stream_data;
PointerHolder<QPDFObjectHandle::StreamDataProvider> stream_provider; std::shared_ptr<QPDFObjectHandle::StreamDataProvider> stream_provider;
std::vector<PointerHolder<QPDFObjectHandle::TokenFilter>> token_filters; std::vector<std::shared_ptr<QPDFObjectHandle::TokenFilter>> token_filters;
}; };
#endif // QPDF_STREAM_HH #endif // QPDF_STREAM_HH