mirror of
https://github.com/jpd002/Play-.git
synced 2025-04-28 13:47:57 +03:00
Fix leaking streams in some image streams.
This commit is contained in:
parent
358c4efc86
commit
b852400139
9 changed files with 25 additions and 25 deletions
|
@ -31,7 +31,7 @@
|
|||
#include "TargetConditionals.h"
|
||||
#endif
|
||||
|
||||
static Framework::CStream* CreateImageStream(const fs::path& imagePath)
|
||||
static std::unique_ptr<Framework::CStream> CreateImageStream(const fs::path& imagePath)
|
||||
{
|
||||
static const char* s3ImagePathPrefix = "//s3/";
|
||||
auto imagePathString = imagePath.string();
|
||||
|
@ -46,7 +46,7 @@ static Framework::CStream* CreateImageStream(const fs::path& imagePath)
|
|||
throw std::runtime_error("Invalid S3 object path.");
|
||||
}
|
||||
auto bucketName = std::string(fullObjectPath.begin(), fullObjectPath.begin() + objectPathPos);
|
||||
return new CS3ObjectStream(bucketName.c_str(), fullObjectPath.c_str() + objectPathPos + 1);
|
||||
return std::make_unique<CS3ObjectStream>(bucketName.c_str(), fullObjectPath.c_str() + objectPathPos + 1);
|
||||
#else
|
||||
throw std::runtime_error("S3 support was disabled during build configuration.");
|
||||
#endif
|
||||
|
@ -55,16 +55,16 @@ static Framework::CStream* CreateImageStream(const fs::path& imagePath)
|
|||
if(Framework::Android::CContentUtils::IsContentPath(imagePath))
|
||||
{
|
||||
auto uri = Framework::Android::CContentUtils::BuildUriFromPath(imagePath);
|
||||
return new Framework::Android::CContentStream(uri.c_str(), "r");
|
||||
return std::make_unique<Framework::Android::CContentStream>(uri.c_str(), "r");
|
||||
}
|
||||
else
|
||||
{
|
||||
return new Framework::CPosixFileStream(imagePathString.c_str(), O_RDONLY);
|
||||
return std::make_unique<Framework::CPosixFileStream>(imagePathString.c_str(), O_RDONLY);
|
||||
}
|
||||
#elif defined(__EMSCRIPTEN__)
|
||||
return new CJsDiscImageDeviceStream();
|
||||
return std::make_unique<CJsDiscImageDeviceStream>();
|
||||
#else
|
||||
return new Framework::CStdStream(imagePathString.c_str(), "rb");
|
||||
return std::make_unique<Framework::CStdStream>(imagePathString.c_str(), "rb");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
#include "ChdCdImageStream.h"
|
||||
#include <libchdr/chd.h>
|
||||
|
||||
CChdCdImageStream::CChdCdImageStream(Framework::CStream* baseStream)
|
||||
: CChdImageStream(baseStream)
|
||||
CChdCdImageStream::CChdCdImageStream(std::unique_ptr<Framework::CStream> baseStream)
|
||||
: CChdImageStream(std::move(baseStream))
|
||||
{
|
||||
//We only support 2448 bytes units
|
||||
assert(m_unitSize == 2448);
|
||||
|
|
|
@ -11,7 +11,7 @@ public:
|
|||
TRACK_TYPE_MODE2_RAW,
|
||||
};
|
||||
|
||||
CChdCdImageStream(Framework::CStream*);
|
||||
CChdCdImageStream(std::unique_ptr<Framework::CStream>);
|
||||
|
||||
TRACK_TYPE GetTrack0Type() const;
|
||||
|
||||
|
|
|
@ -5,10 +5,11 @@
|
|||
#include <stdexcept>
|
||||
#include "ChdStreamSupport.h"
|
||||
|
||||
CChdImageStream::CChdImageStream(Framework::CStream* baseStream)
|
||||
: m_baseStream(baseStream)
|
||||
//Should probably take a shared_ptr instead of raw
|
||||
CChdImageStream::CChdImageStream(std::unique_ptr<Framework::CStream> baseStream)
|
||||
: m_baseStream(std::move(baseStream))
|
||||
{
|
||||
m_file = ChdStreamSupport::CreateFileFromStream(baseStream);
|
||||
m_file = ChdStreamSupport::CreateFileFromStream(m_baseStream.get());
|
||||
chd_error result = chd_open_core_file(m_file, CHD_OPEN_READ, nullptr, &m_chd);
|
||||
if(result != CHDERR_NONE)
|
||||
{
|
||||
|
|
|
@ -9,7 +9,7 @@ typedef struct chd_core_file core_file;
|
|||
class CChdImageStream : public Framework::CStream
|
||||
{
|
||||
public:
|
||||
CChdImageStream(Framework::CStream* baseStream);
|
||||
CChdImageStream(std::unique_ptr<Framework::CStream> baseStream);
|
||||
virtual ~CChdImageStream();
|
||||
|
||||
uint32 GetUnitSize() const;
|
||||
|
@ -23,7 +23,7 @@ public:
|
|||
protected:
|
||||
uint64 GetTotalSize() const;
|
||||
|
||||
Framework::CStream* m_baseStream = nullptr;
|
||||
std::unique_ptr<Framework::CStream> m_baseStream;
|
||||
core_file* m_file = nullptr;
|
||||
chd_file* m_chd = nullptr;
|
||||
uint32 m_unitSize = 0;
|
||||
|
|
|
@ -21,14 +21,14 @@ struct CsoHeader
|
|||
uint8 reserved[2];
|
||||
};
|
||||
|
||||
CCsoImageStream::CCsoImageStream(CStream* baseStream)
|
||||
: m_baseStream(baseStream)
|
||||
CCsoImageStream::CCsoImageStream(std::unique_ptr<CStream> baseStream)
|
||||
: m_baseStream(std::move(baseStream))
|
||||
, m_readBuffer(nullptr)
|
||||
, m_zlibBuffer(nullptr)
|
||||
, m_index(nullptr)
|
||||
, m_position(0)
|
||||
{
|
||||
if(baseStream == nullptr)
|
||||
if(!m_baseStream)
|
||||
{
|
||||
throw std::runtime_error("Null base stream supplied.");
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
class CCsoImageStream : public Framework::CStream
|
||||
{
|
||||
public:
|
||||
CCsoImageStream(Framework::CStream* baseStream);
|
||||
CCsoImageStream(std::unique_ptr<Framework::CStream> baseStream);
|
||||
virtual ~CCsoImageStream();
|
||||
|
||||
virtual void Seek(int64 pos, Framework::STREAM_SEEK_DIRECTION whence) override;
|
||||
|
@ -23,7 +23,7 @@ private:
|
|||
uint64 ReadBaseAt(uint64 pos, uint8* dest, uint64 bytes);
|
||||
void DecompressFrame(uint32 frame, uint64 readBufferSize);
|
||||
|
||||
Framework::CStream* m_baseStream;
|
||||
std::unique_ptr<Framework::CStream> m_baseStream;
|
||||
uint32 m_frameSize;
|
||||
uint8 m_frameShift;
|
||||
uint8 m_indexShift;
|
||||
|
|
|
@ -7,10 +7,10 @@
|
|||
#include "zstd_zlibwrapper.h"
|
||||
#include "StdStream.h"
|
||||
|
||||
CIszImageStream::CIszImageStream(CStream* baseStream)
|
||||
: m_baseStream(baseStream)
|
||||
CIszImageStream::CIszImageStream(std::unique_ptr<CStream> baseStream)
|
||||
: m_baseStream(std::move(baseStream))
|
||||
{
|
||||
if(baseStream == nullptr)
|
||||
if(!m_baseStream)
|
||||
{
|
||||
throw std::runtime_error("Null base stream supplied.");
|
||||
}
|
||||
|
@ -39,7 +39,6 @@ CIszImageStream::~CIszImageStream()
|
|||
delete[] m_cachedBlock;
|
||||
delete[] m_readBuffer;
|
||||
delete[] m_blockDescriptorTable;
|
||||
delete m_baseStream;
|
||||
}
|
||||
|
||||
void CIszImageStream::Seek(int64 position, Framework::STREAM_SEEK_DIRECTION origin)
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
class CIszImageStream : public Framework::CStream
|
||||
{
|
||||
public:
|
||||
CIszImageStream(Framework::CStream*);
|
||||
CIszImageStream(std::unique_ptr<Framework::CStream>);
|
||||
virtual ~CIszImageStream();
|
||||
|
||||
virtual void Seek(int64, Framework::STREAM_SEEK_DIRECTION) override;
|
||||
|
@ -78,7 +78,7 @@ private:
|
|||
void ReadGzipBlock(uint32);
|
||||
void ReadBz2Block(uint32);
|
||||
|
||||
Framework::CStream* m_baseStream = nullptr;
|
||||
std::unique_ptr<Framework::CStream> m_baseStream;
|
||||
HEADER m_header;
|
||||
BLOCKDESCRIPTOR* m_blockDescriptorTable = nullptr;
|
||||
int64 m_cachedBlockNumber = -1;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue