fix some memleaks in DiscIO. Fix for issue 1238.

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3936 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
Shawn Hoffman 2009-08-03 22:51:13 +00:00
parent 3ac6b08456
commit 0cb7934d93
10 changed files with 22 additions and 177 deletions

View File

@ -114,10 +114,10 @@ bool IBannerLoader::CopyBeUnicodeToString( std::string& _rDestination, const u16
_rDestination = pAnsiStrBuffer; _rDestination = pAnsiStrBuffer;
returnCode = true; returnCode = true;
} }
delete pAnsiStrBuffer; delete[] pAnsiStrBuffer;
} }
} }
delete buffer; delete[] buffer;
} }
} }
#else #else

View File

@ -122,7 +122,7 @@ bool CBannerLoaderWii::GetBanner(u32* _pBannerImage)
{ {
SWiiBanner* pBanner = (SWiiBanner*)m_pBannerFile; SWiiBanner* pBanner = (SWiiBanner*)m_pBannerFile;
u32 Buffer[192 * 64]; u32* Buffer = new u32[192 * 64];
decode5A3image(Buffer, (u16*)pBanner->m_BannerTexture, 192, 64); decode5A3image(Buffer, (u16*)pBanner->m_BannerTexture, 192, 64);
// ugly scaling :) TODO: at least a 2x2 box filter, preferably a 3x3 gaussian :) // ugly scaling :) TODO: at least a 2x2 box filter, preferably a 3x3 gaussian :)
@ -133,6 +133,8 @@ bool CBannerLoaderWii::GetBanner(u32* _pBannerImage)
_pBannerImage[y*96+x] = Buffer[(y*192*2) + (x*2)]; _pBannerImage[y*96+x] = Buffer[(y*192*2) + (x*2)];
} }
} }
delete pBanner;
delete[] Buffer;
} }
return true; return true;
} }

View File

@ -227,7 +227,7 @@ bool CompressFileToBlob(const char* infile, const char* outfile, u32 sub_type,
offsets[i] = position; offsets[i] = position;
// u64 start = i * header.block_size; // u64 start = i * header.block_size;
// u64 size = header.block_size; // u64 size = header.block_size;
memset(in_buf, 0, header.block_size); std::fill(in_buf, in_buf + header.block_size, 0);
fread(in_buf, header.block_size, 1, inf); fread(in_buf, header.block_size, 1, inf);
z_stream z; z_stream z;
memset(&z, 0, sizeof(z)); memset(&z, 0, sizeof(z));

View File

@ -123,7 +123,7 @@ bool Scrub(const char* filename, CompressCB callback, void* arg)
m_Disc = CreateVolumeFromFilename(filename); m_Disc = CreateVolumeFromFilename(filename);
m_FileSize = m_Disc->GetSize(); m_FileSize = m_Disc->GetSize();
u64 numClusters = m_FileSize / CLUSTER_SIZE; u32 numClusters = (u32)(m_FileSize / CLUSTER_SIZE);
// Warn if not DVD5 or DVD9 size // Warn if not DVD5 or DVD9 size
if (numClusters != 0x23048 && numClusters != 0x46090) if (numClusters != 0x23048 && numClusters != 0x46090)
@ -158,7 +158,7 @@ bool Scrub(const char* filename, CompressCB callback, void* arg)
// Modify file, obeying the table of free blocks // Modify file, obeying the table of free blocks
NOTICE_LOG(DISCIO, "Removing garbage data...go get some coffee :)"); NOTICE_LOG(DISCIO, "Removing garbage data...go get some coffee :)");
for (u64 i = 0; i < numClusters; i++) for (u32 i = 0; i < numClusters; i++)
{ {
u64 CurrentOffset = i * CLUSTER_SIZE; u64 CurrentOffset = i * CLUSTER_SIZE;
@ -184,7 +184,7 @@ bool Scrub(const char* filename, CompressCB callback, void* arg)
if (i % (numClusters / 1000) == 0) if (i % (numClusters / 1000) == 0)
{ {
char temp[512]; char temp[512];
sprintf(temp, "DiscScrubber: %llu/%llu (%s)", i, numClusters, m_FreeTable[i] ? "Free" : "Used"); sprintf(temp, "DiscScrubber: %lu/%lu (%s)", i, numClusters, m_FreeTable[i] ? "Free" : "Used");
callback(temp, (float)i / (float)numClusters, arg); callback(temp, (float)i / (float)numClusters, arg);
} }
} }
@ -196,8 +196,8 @@ bool Scrub(const char* filename, CompressCB callback, void* arg)
cleanup: cleanup:
if (pFile) fclose(pFile); if (pFile) fclose(pFile);
delete m_Sector1; delete[] m_Sector1;
delete m_FreeTable; delete[] m_FreeTable;
return success; return success;
} }
@ -241,10 +241,9 @@ bool MarkAsScrubbed(const char* filename)
if (!f) if (!f)
return false; return false;
bool success;
u8 ScrubbedFlag[1] = {SCRUBBER_VERSION}; u8 ScrubbedFlag[1] = {SCRUBBER_VERSION};
fseek(f, 0x80, SEEK_SET); fseek(f, 0x80, SEEK_SET);
success |= fwrite(ScrubbedFlag, 1, 1, f) == 1; bool success = fwrite(ScrubbedFlag, 1, 1, f) == 1;
fclose(f); fclose(f);
return success; return success;
} }

View File

@ -114,7 +114,7 @@ namespace DiscIO
fread(lpSector, 1, m_blocksize, file_); fread(lpSector, 1, m_blocksize, file_);
#endif #endif
memcpy(out_ptr, lpSector, m_blocksize); memcpy(out_ptr, lpSector, m_blocksize);
delete lpSector; delete[] lpSector;
} }
bool DriveReader::ReadMultipleAlignedBlocks(u64 block_num, u64 num_blocks, u8 *out_ptr) bool DriveReader::ReadMultipleAlignedBlocks(u64 block_num, u64 num_blocks, u8 *out_ptr)

View File

@ -39,7 +39,7 @@ struct SFileInfo
SFileInfo(const SFileInfo &rhs) : m_NameOffset(rhs.m_NameOffset), SFileInfo(const SFileInfo &rhs) : m_NameOffset(rhs.m_NameOffset),
m_Offset(rhs.m_Offset), m_FileSize(rhs.m_FileSize) { m_Offset(rhs.m_Offset), m_FileSize(rhs.m_FileSize) {
strcpy(m_FullPath, rhs.m_FullPath); memcpy(m_FullPath, rhs.m_FullPath, strlen(rhs.m_FullPath));
} }
}; };

View File

@ -253,12 +253,12 @@ bool CNANDContentLoader::CreateFromDirectory(const std::string& _rPath)
FILE* pFile = fopen(szFilename, "rb"); FILE* pFile = fopen(szFilename, "rb");
if (pFile != NULL) if (pFile != NULL)
{ {
u64 Size = File::GetSize(szFilename); u64 ContentSize = File::GetSize(szFilename);
rContent.m_pData = new u8[(u32)Size]; rContent.m_pData = new u8[(u32)ContentSize];
_dbg_assert_msg_(BOOT, rContent.m_Size==Size, "TMDLoader: Filesize doesnt fit (%s %i)... prolly you have a bad dump", szFilename, i); _dbg_assert_msg_(BOOT, rContent.m_Size==ContentSize, "TMDLoader: Filesize doesnt fit (%s %i)... prolly you have a bad dump", szFilename, i);
fread(rContent.m_pData, (size_t)Size, 1, pFile); fread(rContent.m_pData, (size_t)ContentSize, 1, pFile);
fclose(pFile); fclose(pFile);
} }
else else

View File

@ -202,10 +202,8 @@ CISOProperties::~CISOProperties()
{ {
for (std::vector<WiiPartition>::const_iterator PartIter = WiiDisc.begin(); PartIter != WiiDisc.end(); ++PartIter) for (std::vector<WiiPartition>::const_iterator PartIter = WiiDisc.begin(); PartIter != WiiDisc.end(); ++PartIter)
{ {
delete PartIter->FileSystem; delete PartIter->FileSystem; // Also deletes the corresponding PartIter->Files
delete PartIter->Partition; delete PartIter->Partition;
for (std::vector<const DiscIO::SFileInfo *>::const_iterator FileIter = PartIter->Files.begin(); FileIter != PartIter->Files.end(); ++FileIter)
delete *FileIter;
} }
} }
else else
@ -1068,7 +1066,7 @@ bool CISOProperties::CopySJISToString( wxString& _rDestination, const char* _src
} }
#endif #endif
} }
delete pUnicodeStrBuffer; delete[] pUnicodeStrBuffer;
} }
} }
#else #else

View File

@ -119,6 +119,7 @@ void Host_UpdateDisasmDialog(){}
void Host_UpdateLogDisplay(){} void Host_UpdateLogDisplay(){}
void Host_UpdateMemoryView(){} void Host_UpdateMemoryView(){}
void Host_NotifyMapLoaded(){} void Host_NotifyMapLoaded(){}
void Host_ShowJitResults(unsigned int address){}
void Host_UpdateBreakPointView(){} void Host_UpdateBreakPointView(){}
void Host_SetDebugMode(bool enable){} void Host_SetDebugMode(bool enable){}

View File

@ -323,161 +323,6 @@
ExcludedFromBuild="true" ExcludedFromBuild="true"
/> />
</Configuration> </Configuration>
<Configuration
Name="DebugFast|Win32"
OutputDirectory="$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
EnableIntrinsicFunctions="true"
AdditionalIncludeDirectories="../Core/Core/Src;../Core/Common/Src;../PluginSpecs;../Core/InputCommon/Src"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="xcopy &quot;$(TargetPath)&quot; &quot;$(SolutionDir)..\Binary\$(PlatformName)\&quot; /e /s /y /d"
ExcludedFromBuild="true"
/>
</Configuration>
<Configuration
Name="DebugFast|x64"
OutputDirectory="$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
EnableIntrinsicFunctions="true"
AdditionalIncludeDirectories="../Core/Core/Src;../Core/Common/Src;../PluginSpecs;../Core/InputCommon/Src"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;_SECURE_SCL=0"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="xcopy &quot;$(TargetPath)&quot; &quot;$(SolutionDir)..\Binary\$(PlatformName)\&quot; /e /s /y /d"
ExcludedFromBuild="true"
/>
</Configuration>
</Configurations> </Configurations>
<References> <References>
</References> </References>