aboutsummaryrefslogtreecommitdiff
path: root/backends/plugins/elf
diff options
context:
space:
mode:
authorMax Horn2010-11-04 00:49:12 +0000
committerMax Horn2010-11-04 00:49:12 +0000
commit99cf0e39368986086d5608509a52e1d4f1a70208 (patch)
treeb318fd67ce82191fe0ffbb142210c53185859863 /backends/plugins/elf
parent44c6a90643128af8c4521d5c5ee86d5885b79b0b (diff)
downloadscummvm-rg350-99cf0e39368986086d5608509a52e1d4f1a70208.tar.gz
scummvm-rg350-99cf0e39368986086d5608509a52e1d4f1a70208.tar.bz2
scummvm-rg350-99cf0e39368986086d5608509a52e1d4f1a70208.zip
COMMON: Undo changes to common/ptr.h, remove Common::ScopedPtrC
The deletePointer() method approach cannot work, as it is called by the destructor of the base class. A possible correct solution would be to enhance ScopedPtr with a "deleter" object like SharedPtr. But this seems overkill as long as we need it in only one place. svn-id: r54057
Diffstat (limited to 'backends/plugins/elf')
-rw-r--r--backends/plugins/elf/elf-loader.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/backends/plugins/elf/elf-loader.cpp b/backends/plugins/elf/elf-loader.cpp
index 17a67f4d02..24a4fda703 100644
--- a/backends/plugins/elf/elf-loader.cpp
+++ b/backends/plugins/elf/elf-loader.cpp
@@ -320,24 +320,30 @@ bool DLObject::load() {
return false;
}
- Common::ScopedPtrC<Elf32_Shdr> shdr(loadSectionHeaders(&ehdr));
+ Elf32_Shdr *shdr = loadSectionHeaders(&ehdr);
if (!shdr)
return false;
_symtab_sect = loadSymbolTable(&ehdr, shdr);
- if (_symtab_sect < 0)
+ if (_symtab_sect < 0) {
+ free(shdr);
return false;
+ }
- if (!loadStringTable(shdr))
+ if (!loadStringTable(shdr)) {
+ free(shdr);
return false;
+ }
// Offset by our segment allocated address
// must use _segmentVMA here for multiple segments (MIPS)
_segmentOffset = ptrdiff_t(_segment) - _segmentVMA;
relocateSymbols(_segmentOffset);
- if (!relocateRels(&ehdr, shdr))
+ if (!relocateRels(&ehdr, shdr)) {
+ free(shdr);
return false;
+ }
return true;
}