summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2011-03-22 07:27:23 +0000
committerJordan Woyak <jordan.woyak@gmail.com>2011-03-22 07:27:23 +0000
commitf8620fcd0b4dcc6006a6a228cd5cc79cc82a83fc (patch)
tree0bd19b701ebf689d0f07719816d59c6391e7eb29 /Source/Core
parent017735b9ffdc7305f07b461a100f62c1d2fbe9ef (diff)
Fixed some memory leaks. Only one was mine ;P
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7392 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/AudioCommon/Src/AudioCommon.cpp2
-rw-r--r--Source/Core/Common/Src/ChunkFile.h34
-rw-r--r--Source/Core/Common/Src/ConsoleListener.cpp35
-rw-r--r--Source/Core/Common/Src/FileUtil.cpp2
-rw-r--r--Source/Core/Core/Src/DSP/DSPEmitter.cpp1
-rw-r--r--Source/Core/Core/Src/DSP/DSPEmitter.h2
-rw-r--r--Source/Core/Core/Src/DSPEmulator.h5
-rw-r--r--Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h1
-rw-r--r--Source/Core/Core/Src/HW/DSPLLE/DSPLLE.h1
-rw-r--r--Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp22
-rw-r--r--Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.h2
-rw-r--r--Source/Core/DolphinWX/Src/GameListCtrl.cpp44
-rw-r--r--Source/Core/DolphinWX/Src/GameListCtrl.h4
-rw-r--r--Source/Core/DolphinWX/Src/ISOFile.cpp15
-rw-r--r--Source/Core/DolphinWX/Src/ISOFile.h4
-rw-r--r--Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp8
-rw-r--r--Source/Core/VideoCommon/Src/OpenCL/OCLTextureDecoder.cpp2
17 files changed, 87 insertions, 97 deletions
diff --git a/Source/Core/AudioCommon/Src/AudioCommon.cpp b/Source/Core/AudioCommon/Src/AudioCommon.cpp
index 637f74502b..fa4d134860 100644
--- a/Source/Core/AudioCommon/Src/AudioCommon.cpp
+++ b/Source/Core/AudioCommon/Src/AudioCommon.cpp
@@ -31,6 +31,8 @@ namespace AudioCommon
{
SoundStream *InitSoundStream(CMixer *mixer, void *hWnd)
{
+ // TODO: possible memleak with mixer
+
std::string backend = ac_Config.sBackend;
if (backend == BACKEND_OPENAL && OpenALStream::isValid())
soundStream = new OpenALStream(mixer);
diff --git a/Source/Core/Common/Src/ChunkFile.h b/Source/Core/Common/Src/ChunkFile.h
index 5f897b1359..9dd1578890 100644
--- a/Source/Core/Common/Src/ChunkFile.h
+++ b/Source/Core/Common/Src/ChunkFile.h
@@ -119,9 +119,12 @@ public:
// Store vectors.
template<class T>
- void Do(std::vector<T> &x) {
- // TODO
- PanicAlert("Do(vector<>) does not yet work.");
+ void Do(std::vector<T> &x)
+ {
+ u32 vec_size = (u32)x.size();
+ Do(vec_size);
+ x.resize(vec_size);
+ DoArray(&x[0], vec_size);
}
// Store strings.
@@ -138,23 +141,6 @@ public:
}
(*ptr) += stringLen;
}
-
- void DoBuffer(u8** pBuffer, u32& _Size)
- {
- Do(_Size);
-
- if (_Size > 0) {
- switch (mode) {
- case MODE_READ: delete[] *pBuffer; *pBuffer = new u8[_Size]; memcpy(*pBuffer, *ptr, _Size); break;
- case MODE_WRITE: memcpy(*ptr, *pBuffer, _Size); break;
- case MODE_MEASURE: break;
- case MODE_VERIFY: if(*pBuffer) for(u32 i = 0; i < _Size; i++) _dbg_assert_msg_(COMMON, (*pBuffer)[i] == (*ptr)[i], "Savestate verification failure: %d (0x%X) (at %p) != %d (0x%X) (at %p).\n", (*pBuffer)[i], (*pBuffer)[i], &(*pBuffer)[i], (*ptr)[i], (*ptr)[i], &(*ptr)[i]); break;
- }
- } else {
- *pBuffer = NULL;
- }
- (*ptr) += _Size;
- }
template<class T>
void DoArray(T *x, int count) {
@@ -260,9 +246,9 @@ public:
u8 *ptr = 0;
PointerWrap p(&ptr, PointerWrap::MODE_MEASURE);
_class.DoState(p);
- size_t sz = (size_t)ptr;
- u8 *buffer = new u8[sz];
- ptr = buffer;
+ size_t const sz = (size_t)ptr;
+ std::vector<u8> buffer(sz);
+ ptr = &buffer[0];
p.SetMode(PointerWrap::MODE_WRITE);
_class.DoState(p);
@@ -279,7 +265,7 @@ public:
return false;
}
- if (!pFile.WriteBytes(buffer, sz))
+ if (!pFile.WriteBytes(&buffer[0], sz))
{
ERROR_LOG(COMMON,"ChunkReader: Failed writing data");
return false;
diff --git a/Source/Core/Common/Src/ConsoleListener.cpp b/Source/Core/Common/Src/ConsoleListener.cpp
index 4240061933..e0b2bf4d36 100644
--- a/Source/Core/Common/Src/ConsoleListener.cpp
+++ b/Source/Core/Common/Src/ConsoleListener.cpp
@@ -22,6 +22,7 @@
#include <math.h>
#ifdef _WIN32
#include <windows.h>
+#include <array>
#else
#include <stdarg.h>
#endif
@@ -175,8 +176,8 @@ void ConsoleListener::PixelSpace(int Left, int Top, int Width, int Height, bool
bool DAft = true;
std::string SLog = "";
- HWND hWnd = GetConsoleWindow();
- HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
+ const HWND hWnd = GetConsoleWindow();
+ const HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
// Get console info
CONSOLE_SCREEN_BUFFER_INFO ConInfo;
@@ -189,30 +190,30 @@ void ConsoleListener::PixelSpace(int Left, int Top, int Width, int Height, bool
DWORD cCharsRead = 0;
COORD coordScreen = { 0, 0 };
- std::vector<char*> Str;
- std::vector<WORD*> Attr;
+ static const int MAX_BYTES = 1024 * 16;
+
+ std::vector<std::array<CHAR, MAX_BYTES>> Str;
+ std::vector<std::array<WORD, MAX_BYTES>> Attr;
+
// ReadConsoleOutputAttribute seems to have a limit at this level
- const int MAX_BYTES = 1024 * 16;
- int ReadBufferSize = MAX_BYTES - 32;
+ static const int ReadBufferSize = MAX_BYTES - 32;
+
DWORD cAttrRead = ReadBufferSize;
DWORD BytesRead = 0;
- int i = 0;
- int LastAttrRead = 0;
while (BytesRead < BufferSize)
{
- Str.push_back(new char[MAX_BYTES]);
- if (!ReadConsoleOutputCharacter(hConsole, Str[i], ReadBufferSize, coordScreen, &cCharsRead))
+ Str.resize(Str.size() + 1);
+ if (!ReadConsoleOutputCharacter(hConsole, Str.back().data(), ReadBufferSize, coordScreen, &cCharsRead))
SLog += StringFromFormat("WriteConsoleOutputCharacter error");
- Attr.push_back(new WORD[MAX_BYTES]);
- if (!ReadConsoleOutputAttribute(hConsole, Attr[i], ReadBufferSize, coordScreen, &cAttrRead))
+
+ Attr.resize(Attr.size() + 1);
+ if (!ReadConsoleOutputAttribute(hConsole, Attr.back().data(), ReadBufferSize, coordScreen, &cAttrRead))
SLog += StringFromFormat("WriteConsoleOutputAttribute error");
// Break on error
if (cAttrRead == 0) break;
BytesRead += cAttrRead;
- i++;
coordScreen = GetCoordinates(BytesRead, ConInfo.dwSize.X);
- LastAttrRead = cAttrRead;
}
// Letter space
int LWidth = (int)(floor((float)Width / 8.0f) - 1.0f);
@@ -232,16 +233,16 @@ void ConsoleListener::PixelSpace(int Left, int Top, int Width, int Height, bool
DWORD cAttrWritten = 0;
for (size_t i = 0; i < Attr.size(); i++)
{
- if (!WriteConsoleOutputCharacter(hConsole, Str[i], ReadBufferSize, coordScreen, &cCharsWritten))
+ if (!WriteConsoleOutputCharacter(hConsole, Str[i].data(), ReadBufferSize, coordScreen, &cCharsWritten))
SLog += StringFromFormat("WriteConsoleOutputCharacter error");
- if (!WriteConsoleOutputAttribute(hConsole, Attr[i], ReadBufferSize, coordScreen, &cAttrWritten))
+ if (!WriteConsoleOutputAttribute(hConsole, Attr[i].data(), ReadBufferSize, coordScreen, &cAttrWritten))
SLog += StringFromFormat("WriteConsoleOutputAttribute error");
BytesWritten += cAttrWritten;
coordScreen = GetCoordinates(BytesWritten, LBufWidth);
}
- int OldCursor = ConInfo.dwCursorPosition.Y * ConInfo.dwSize.X + ConInfo.dwCursorPosition.X;
+ const int OldCursor = ConInfo.dwCursorPosition.Y * ConInfo.dwSize.X + ConInfo.dwCursorPosition.X;
COORD Coo = GetCoordinates(OldCursor, LBufWidth);
SetConsoleCursorPosition(hConsole, Coo);
diff --git a/Source/Core/Common/Src/FileUtil.cpp b/Source/Core/Common/Src/FileUtil.cpp
index 969ba9f948..bbfc03f2fa 100644
--- a/Source/Core/Common/Src/FileUtil.cpp
+++ b/Source/Core/Common/Src/FileUtil.cpp
@@ -677,7 +677,7 @@ bool WriteStringToFile(bool text_file, const std::string &str, const char *filen
if (!f)
return false;
size_t len = str.size();
- if (len != fwrite(str.data(), 1, str.size(), f))
+ if (len != fwrite(str.data(), 1, str.size(), f)) // TODO: string::data() may not be contiguous
{
fclose(f);
return false;
diff --git a/Source/Core/Core/Src/DSP/DSPEmitter.cpp b/Source/Core/Core/Src/DSP/DSPEmitter.cpp
index 571276ef33..20f0079c66 100644
--- a/Source/Core/Core/Src/DSP/DSPEmitter.cpp
+++ b/Source/Core/Core/Src/DSP/DSPEmitter.cpp
@@ -41,7 +41,6 @@ DSPEmitter::DSPEmitter() : gpr(*this), storeIndex(-1), storeIndex2(-1)
blocks = new DSPCompiledCode[MAX_BLOCKS];
blockLinks = new Block[MAX_BLOCKS];
blockSize = new u16[MAX_BLOCKS];
- unresolvedJumps = new std::list<u16>[MAX_BLOCKS];
compileSR = 0;
compileSR |= SR_INT_ENABLE;
diff --git a/Source/Core/Core/Src/DSP/DSPEmitter.h b/Source/Core/Core/Src/DSP/DSPEmitter.h
index 6c6b97b9c7..fc51e1d376 100644
--- a/Source/Core/Core/Src/DSP/DSPEmitter.h
+++ b/Source/Core/Core/Src/DSP/DSPEmitter.h
@@ -260,7 +260,7 @@ public:
u16 startAddr;
Block *blockLinks;
u16 *blockSize;
- std::list<u16> *unresolvedJumps;
+ std::list<u16> unresolvedJumps[MAX_BLOCKS];
DSPJitRegCache gpr;
private:
diff --git a/Source/Core/Core/Src/DSPEmulator.h b/Source/Core/Core/Src/DSPEmulator.h
index 34ebe83252..657185a13d 100644
--- a/Source/Core/Core/Src/DSPEmulator.h
+++ b/Source/Core/Core/Src/DSPEmulator.h
@@ -18,8 +18,8 @@
#ifndef _DSPEMULATOR_H_
#define _DSPEMULATOR_H_
-
#include "ChunkFile.h"
+#include "SoundStream.h"
class DSPEmulator
{
@@ -43,6 +43,9 @@ public:
virtual void DSP_Update(int cycles) = 0;
virtual void DSP_StopSoundStream() = 0;
virtual void DSP_ClearAudioBuffer(bool mute) = 0;
+
+protected:
+ SoundStream *soundStream;
};
DSPEmulator *CreateDSPEmulator(bool LLE);
diff --git a/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h b/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h
index 8abd6c0358..7b5d6f1eb5 100644
--- a/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h
+++ b/Source/Core/Core/Src/HW/DSPHLE/DSPHLE.h
@@ -61,7 +61,6 @@ private:
bool m_bWii;
bool m_InitMixer;
- SoundStream *soundStream;
// Fake mailbox utility
struct DSPState
diff --git a/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.h b/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.h
index 7df273503e..5fff3d423b 100644
--- a/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.h
+++ b/Source/Core/Core/Src/HW/DSPLLE/DSPLLE.h
@@ -48,7 +48,6 @@ private:
static void dsp_thread(DSPLLE* lpParameter);
std::thread m_hDSPThread;
- SoundStream *soundStream;
bool m_InitMixer;
void *m_hWnd;
bool m_bWii;
diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp
index 4f4125c8dc..8096adb36a 100644
--- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp
+++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_DI.cpp
@@ -117,25 +117,21 @@ bool CWII_IPC_HLE_Device_di::IOCtlV(u32 _CommandAddress)
_dbg_assert_msg_(WII_IPC_DVD, CommandBuffer.InBuffer[1].m_Address == 0, "DVDLowOpenPartition with ticket");
_dbg_assert_msg_(WII_IPC_DVD, CommandBuffer.InBuffer[2].m_Address == 0, "DVDLowOpenPartition with cert chain");
- bool readOK = false;
-
// Get TMD offset for requested partition...
- u64 TMDOffset = ((u64)Memory::Read_U32(CommandBuffer.InBuffer[0].m_Address + 4) << 2 ) + 0x2c0;
+ u64 const TMDOffset = ((u64)Memory::Read_U32(CommandBuffer.InBuffer[0].m_Address + 4) << 2 ) + 0x2c0;
INFO_LOG(WII_IPC_DVD, "DVDLowOpenPartition: TMDOffset 0x%016llx", TMDOffset);
- u32 TMDsz = 0x208; //CommandBuffer.PayloadBuffer[0].m_Size;
- u8 *pTMD = new u8[TMDsz];
- if (pTMD)
- {
+ static u32 const TMDsz = 0x208; //CommandBuffer.PayloadBuffer[0].m_Size;
+ u8 pTMD[TMDsz];
+
// Read TMD to the buffer
- VolumeHandler::RAWReadToPtr(pTMD, TMDOffset, TMDsz);
+ VolumeHandler::RAWReadToPtr(pTMD, TMDOffset, TMDsz);
- memcpy(Memory::GetPointer(CommandBuffer.PayloadBuffer[0].m_Address), pTMD, TMDsz);
- readOK |= true;
- WII_IPC_HLE_Interface::ES_DIVerify(pTMD, TMDsz);
- }
- ReturnValue = readOK ? 1 : 0;
+ memcpy(Memory::GetPointer(CommandBuffer.PayloadBuffer[0].m_Address), pTMD, TMDsz);
+ WII_IPC_HLE_Interface::ES_DIVerify(pTMD, TMDsz);
+
+ ReturnValue = 1;
}
break;
diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.h b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.h
index ef08a068ce..1ebc77b1b5 100644
--- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.h
+++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_usb.h
@@ -164,7 +164,7 @@ private:
ACLQ(const u8* data, const size_t size, const u16 conn_handle)
: m_size(size), m_conn_handle(conn_handle)
{
- m_buffer = new u8[m_size];
+ m_buffer = new u8[m_size]; // TODO: memleak
memcpy(m_buffer, data, m_size);
}
};
diff --git a/Source/Core/DolphinWX/Src/GameListCtrl.cpp b/Source/Core/DolphinWX/Src/GameListCtrl.cpp
index 6d4a8d15d3..e6da681b45 100644
--- a/Source/Core/DolphinWX/Src/GameListCtrl.cpp
+++ b/Source/Core/DolphinWX/Src/GameListCtrl.cpp
@@ -147,6 +147,12 @@ CGameListCtrl::~CGameListCtrl()
{
if (m_imageListSmall)
delete m_imageListSmall;
+
+ while (!m_ISOFiles.empty()) // so lazy
+ {
+ delete m_ISOFiles.back();
+ m_ISOFiles.pop_back();
+ }
}
void CGameListCtrl::InitBitmaps()
@@ -276,7 +282,7 @@ void CGameListCtrl::Update()
for (int i = 0; i < (int)m_ISOFiles.size(); i++)
{
InsertItemInReportView(i);
- if (m_ISOFiles[i].IsCompressed())
+ if (m_ISOFiles[i]->IsCompressed())
SetItemTextColour(i, wxColour(0xFF0000));
}
@@ -375,7 +381,7 @@ void CGameListCtrl::OnPaintDrawImages(wxPaintEvent& event)
if (GetItemRect(i, itemRect))
{
int itemY = itemRect.GetTop();
- const GameListItem& rISOFile = m_ISOFiles[GetItemData(i)];
+ const GameListItem& rISOFile = *m_ISOFiles[GetItemData(i)];
m_imageListSmall->Draw(m_PlatformImageIndex[rISOFile.GetPlatform()],
dc, itemRect.GetX()+3, itemY);
@@ -415,7 +421,7 @@ void CGameListCtrl::InsertItemInReportView(long _Index)
wxCSConv SJISConv(wxFontMapper::GetEncodingName(wxFONTENCODING_EUC_JP));
#endif
- GameListItem& rISOFile = m_ISOFiles[_Index];
+ GameListItem& rISOFile = *m_ISOFiles[_Index];
m_gamePath.append(rISOFile.GetFileName() + '\n');
// Insert a first row with the platform image, that will be used as the Index
@@ -612,7 +618,9 @@ void CGameListCtrl::ScanForISOs()
if (!Cont)
break;
- GameListItem ISOFile(rFilenames[i]);
+ GameListItem* const iso_file = new GameListItem(rFilenames[i]);
+ const GameListItem& ISOFile = *iso_file;
+
if (ISOFile.IsValid())
{
bool list = true;
@@ -665,21 +673,21 @@ void CGameListCtrl::ScanForISOs()
}
if (list)
- m_ISOFiles.push_back(ISOFile);
+ m_ISOFiles.push_back(iso_file);
}
}
}
if (SConfig::GetInstance().m_ListDrives)
{
- std::vector<std::string> drives = cdio_get_devices();
- GameListItem * Drive[24];
- // Another silly Windows limitation of 24 drive letters
- for (u32 i = 0; i < drives.size() && i < 24; i++)
+ const std::vector<std::string> drives = cdio_get_devices();
+
+ for (std::vector<std::string>::const_iterator iter = drives.begin(); iter != drives.end(); ++iter)
{
- Drive[i] = new GameListItem(drives[i].c_str());
- if (Drive[i]->IsValid())
- m_ISOFiles.push_back(*Drive[i]);
+ std::auto_ptr<GameListItem> gli(new GameListItem(*iter));
+
+ if (gli->IsValid())
+ m_ISOFiles.push_back(gli.release());
}
}
@@ -692,10 +700,12 @@ void CGameListCtrl::OnColBeginDrag(wxListEvent& event)
event.Veto();
}
-const GameListItem *CGameListCtrl::GetISO(int index) const
+const GameListItem *CGameListCtrl::GetISO(size_t index) const
{
- if (index >= (int)m_ISOFiles.size()) return NULL;
- return &m_ISOFiles[index];
+ if (index < m_ISOFiles.size())
+ return m_ISOFiles[index];
+ else
+ return NULL;
}
CGameListCtrl *caller;
@@ -906,7 +916,7 @@ void CGameListCtrl::OnMouseMotion(wxMouseEvent& event)
return;
}
- const GameListItem& rISO = m_ISOFiles[GetItemData(item)];
+ const GameListItem& rISO = *m_ISOFiles[GetItemData(item)];
IniFile ini;
ini.Load(File::GetUserPath(D_GAMECONFIG_IDX) + rISO.GetUniqueID() + ".ini");
@@ -1061,7 +1071,7 @@ const GameListItem * CGameListCtrl::GetSelectedISO()
if (GetSelectedItemCount() > 1)
SetItemState(item, 0, wxLIST_STATE_SELECTED);
- return &m_ISOFiles[GetItemData(item)];
+ return m_ISOFiles[GetItemData(item)];
}
}
}
diff --git a/Source/Core/DolphinWX/Src/GameListCtrl.h b/Source/Core/DolphinWX/Src/GameListCtrl.h
index 8a9a993140..84f4c5e284 100644
--- a/Source/Core/DolphinWX/Src/GameListCtrl.h
+++ b/Source/Core/DolphinWX/Src/GameListCtrl.h
@@ -52,7 +52,7 @@ public:
void BrowseForDirectory();
const GameListItem *GetSelectedISO();
- const GameListItem *GetISO(int index) const;
+ const GameListItem *GetISO(size_t index) const;
enum
{
@@ -71,7 +71,7 @@ private:
std::vector<int> m_FlagImageIndex;
std::vector<int> m_PlatformImageIndex;
std::vector<int> m_EmuStateImageIndex;
- std::vector<GameListItem> m_ISOFiles;
+ std::vector<GameListItem*> m_ISOFiles;
// NetPlay string for the gamelist
std::string m_gameList;
diff --git a/Source/Core/DolphinWX/Src/ISOFile.cpp b/Source/Core/DolphinWX/Src/ISOFile.cpp
index 18c18cd478..8af27a432d 100644
--- a/Source/Core/DolphinWX/Src/ISOFile.cpp
+++ b/Source/Core/DolphinWX/Src/ISOFile.cpp
@@ -47,8 +47,6 @@ GameListItem::GameListItem(const std::string& _rFileName)
, m_FileSize(0)
, m_Valid(false)
, m_BlobCompressed(false)
- , m_pImage(NULL)
- , m_ImageSize(0)
{
if (LoadFromCache())
{
@@ -100,9 +98,8 @@ GameListItem::GameListItem(const std::string& _rFileName)
pBannerLoader->GetDescription(m_Description);
if (pBannerLoader->GetBanner(g_ImageTemp))
{
- m_ImageSize = DVD_BANNER_WIDTH * DVD_BANNER_HEIGHT * 3;
- //use malloc(), since wxImage::Create below calls free() afterwards.
- m_pImage = (u8*)malloc(m_ImageSize);
+ // resize vector to image size
+ m_pImage.resize(DVD_BANNER_WIDTH * DVD_BANNER_HEIGHT * 3);
for (size_t i = 0; i < DVD_BANNER_WIDTH * DVD_BANNER_HEIGHT; i++)
{
@@ -124,14 +121,14 @@ GameListItem::GameListItem(const std::string& _rFileName)
// If not Gamecube, create a cache file only if we have an image.
// Wii isos create their images after you have generated the first savegame
- if (m_Platform == GAMECUBE_DISC || m_pImage)
+ if (m_Platform == GAMECUBE_DISC || !m_pImage.empty())
SaveToCache();
}
}
- if (m_pImage)
+ if (!m_pImage.empty())
{
- m_Image.Create(DVD_BANNER_WIDTH, DVD_BANNER_HEIGHT, m_pImage);
+ m_Image.Create(DVD_BANNER_WIDTH, DVD_BANNER_HEIGHT, &m_pImage[0], true);
}
else
{
@@ -173,7 +170,7 @@ void GameListItem::DoState(PointerWrap &p)
p.Do(m_VolumeSize);
p.Do(m_Country);
p.Do(m_BlobCompressed);
- p.DoBuffer(&m_pImage, m_ImageSize);
+ p.Do(m_pImage);
p.Do(m_Platform);
}
diff --git a/Source/Core/DolphinWX/Src/ISOFile.h b/Source/Core/DolphinWX/Src/ISOFile.h
index 80ff0096d1..7392a4fcf1 100644
--- a/Source/Core/DolphinWX/Src/ISOFile.h
+++ b/Source/Core/DolphinWX/Src/ISOFile.h
@@ -26,7 +26,7 @@
#endif
class PointerWrap;
-class GameListItem
+class GameListItem : NonCopyable
{
public:
GameListItem(const std::string& _rFileName);
@@ -78,7 +78,7 @@ private:
#endif
bool m_Valid;
bool m_BlobCompressed;
- u8* m_pImage;
+ std::vector<u8> m_pImage;
u32 m_ImageSize;
bool LoadFromCache();
diff --git a/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp b/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp
index b738d5aabb..a995ae415a 100644
--- a/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp
+++ b/Source/Core/InputCommon/Src/ControllerInterface/ControllerInterface.cpp
@@ -447,7 +447,7 @@ ControllerInterface::Device* ControllerInterface::FindDevice(const ControllerInt
ControllerInterface::Device::Control* ControllerInterface::InputReference::Detect(const unsigned int ms, Device* const device)
{
unsigned int time = 0;
- bool* const states = new bool[device->Inputs().size()];
+ std::vector<bool> states(device->Inputs().size());
if (device->Inputs().size() == 0)
return NULL;
@@ -457,14 +457,14 @@ ControllerInterface::Device::Control* ControllerInterface::InputReference::Detec
std::vector<Device::Input*>::const_iterator
i = device->Inputs().begin(),
e = device->Inputs().end();
- for (bool* state=states; i != e; ++i)
+ for (std::vector<bool>::iterator state = states.begin(); i != e; ++i)
*state++ = ((*i)->GetState() > INPUT_DETECT_THRESHOLD);
while (time < ms)
{
device->UpdateInput();
i = device->Inputs().begin();
- for (bool* state=states; i != e; ++i,++state)
+ for (std::vector<bool>::iterator state = states.begin(); i != e; ++i,++state)
{
// detected an input
if ((*i)->IsDetectable() && (*i)->GetState() > INPUT_DETECT_THRESHOLD)
@@ -480,8 +480,6 @@ ControllerInterface::Device::Control* ControllerInterface::InputReference::Detec
Common::SleepCurrentThread(10); time += 10;
}
- delete[] states;
-
// no input was detected
return NULL;
}
diff --git a/Source/Core/VideoCommon/Src/OpenCL/OCLTextureDecoder.cpp b/Source/Core/VideoCommon/Src/OpenCL/OCLTextureDecoder.cpp
index 73d9976f5b..1af47f5a4c 100644
--- a/Source/Core/VideoCommon/Src/OpenCL/OCLTextureDecoder.cpp
+++ b/Source/Core/VideoCommon/Src/OpenCL/OCLTextureDecoder.cpp
@@ -114,7 +114,7 @@ void TexDecoder_OpenCL_Initialize()
else
{
binary_size = input.GetSize();
- header = new char[HEADER_SIZE];
+ header = new char[HEADER_SIZE]; // TODO: memleak possible
binary = new char[binary_size];
input.ReadBytes(header, HEADER_SIZE);
input.ReadBytes(binary, binary_size);