# HG changeset patch # User Sebastien Jodogne # Date 1458816401 -3600 # Node ID e251606c1433499623dfbb75187a9a8f291e6933 # Parent 72a2fd7fed8bb4fab273b7924ca963772f58cf59 FromDcmtkBridge::LoadFromMemoryBuffer diff -r 72a2fd7fed8b -r e251606c1433 OrthancServer/FromDcmtkBridge.cpp --- a/OrthancServer/FromDcmtkBridge.cpp Tue Mar 22 15:11:53 2016 +0100 +++ b/OrthancServer/FromDcmtkBridge.cpp Thu Mar 24 11:46:41 2016 +0100 @@ -56,6 +56,7 @@ #include #include #include +#include #include #include @@ -1705,4 +1706,29 @@ return result.release(); } + + + DcmFileFormat* FromDcmtkBridge::LoadFromMemoryBuffer(const void* buffer, + size_t size) + { + DcmInputBufferStream is; + if (size > 0) + { + is.setBuffer(buffer, size); + } + is.setEos(); + + std::auto_ptr result(new DcmFileFormat); + + result->transferInit(); + if (!result->read(is).good()) + { + throw OrthancException(ErrorCode_BadFileFormat); + } + + result->loadAllDataIntoMemory(); + result->transferEnd(); + + return result.release(); + } } diff -r 72a2fd7fed8b -r e251606c1433 OrthancServer/FromDcmtkBridge.h --- a/OrthancServer/FromDcmtkBridge.h Tue Mar 22 15:11:53 2016 +0100 +++ b/OrthancServer/FromDcmtkBridge.h Thu Mar 24 11:46:41 2016 +0100 @@ -39,6 +39,7 @@ #include #include #include +#include #include namespace Orthanc @@ -156,5 +157,8 @@ bool generateIdentifiers, bool decodeDataUriScheme, Encoding defaultEncoding); + + static DcmFileFormat* LoadFromMemoryBuffer(const void* buffer, + size_t size); }; } diff -r 72a2fd7fed8b -r e251606c1433 OrthancServer/ParsedDicomFile.cpp --- a/OrthancServer/ParsedDicomFile.cpp Tue Mar 22 15:11:53 2016 +0100 +++ b/OrthancServer/ParsedDicomFile.cpp Thu Mar 24 11:46:41 2016 +0100 @@ -101,7 +101,6 @@ #include #include #include -#include #include #include #include @@ -150,31 +149,6 @@ }; - // This method can only be called from the constructors! - void ParsedDicomFile::Setup(const void* buffer, - size_t size) - { - DcmInputBufferStream is; - if (size > 0) - { - is.setBuffer(buffer, size); - } - is.setEos(); - - pimpl_->file_.reset(new DcmFileFormat); - pimpl_->file_->transferInit(); - if (!pimpl_->file_->read(is).good()) - { - delete pimpl_; // Avoid a memory leak due to exception - // throwing, as we are in the constructor - - throw OrthancException(ErrorCode_BadFileFormat); - } - pimpl_->file_->loadAllDataIntoMemory(); - pimpl_->file_->transferEnd(); - } - - static void SendPathValueForDictionary(RestApiOutput& output, DcmItem& dicom) { @@ -852,18 +826,18 @@ ParsedDicomFile::ParsedDicomFile(const void* content, size_t size) : pimpl_(new PImpl) { - Setup(content, size); + pimpl_->file_.reset(FromDcmtkBridge::LoadFromMemoryBuffer(content, size)); } ParsedDicomFile::ParsedDicomFile(const std::string& content) : pimpl_(new PImpl) { if (content.size() == 0) { - Setup(NULL, 0); + pimpl_->file_.reset(FromDcmtkBridge::LoadFromMemoryBuffer(NULL, 0)); } else { - Setup(&content[0], content.size()); + pimpl_->file_.reset(FromDcmtkBridge::LoadFromMemoryBuffer(&content[0], content.size())); } } diff -r 72a2fd7fed8b -r e251606c1433 OrthancServer/ParsedDicomFile.h --- a/OrthancServer/ParsedDicomFile.h Tue Mar 22 15:11:53 2016 +0100 +++ b/OrthancServer/ParsedDicomFile.h Thu Mar 24 11:46:41 2016 +0100 @@ -51,9 +51,6 @@ ParsedDicomFile(ParsedDicomFile& other); - void Setup(const void* content, - size_t size); - void RemovePrivateTagsInternal(const std::set* toKeep); void UpdateStorageUid(const DicomTag& tag,