aboutsummaryrefslogtreecommitdiff
path: root/backends/plugins
diff options
context:
space:
mode:
authorYotam Barnoy2010-09-06 13:31:27 +0000
committerYotam Barnoy2010-09-06 13:31:27 +0000
commitc2cafe426e8216d46a70b479ff0071a8b66b9327 (patch)
tree223dd11370e86b75984cf13b3c6bd72d200b9d61 /backends/plugins
parentb77fd21969eba7e30dfc1b959746af6dfcb3f328 (diff)
downloadscummvm-rg350-c2cafe426e8216d46a70b479ff0071a8b66b9327.tar.gz
scummvm-rg350-c2cafe426e8216d46a70b479ff0071a8b66b9327.tar.bz2
scummvm-rg350-c2cafe426e8216d46a70b479ff0071a8b66b9327.zip
PLUGINS: used variation of ScopedPtr to clean up load() function
svn-id: r52592
Diffstat (limited to 'backends/plugins')
-rw-r--r--backends/plugins/elf/elf-loader.cpp36
1 files changed, 16 insertions, 20 deletions
diff --git a/backends/plugins/elf/elf-loader.cpp b/backends/plugins/elf/elf-loader.cpp
index f4226b4187..32eae2cba8 100644
--- a/backends/plugins/elf/elf-loader.cpp
+++ b/backends/plugins/elf/elf-loader.cpp
@@ -30,6 +30,7 @@
#include "common/debug.h"
#include "common/file.h"
#include "common/fs.h"
+#include "common/ptr.h"
DLObject::DLObject() :
_file(0),
@@ -303,8 +304,6 @@ void DLObject::relocateSymbols(ptrdiff_t offset) {
bool DLObject::load() {
Elf32_Ehdr ehdr;
Elf32_Phdr phdr;
- Elf32_Shdr *shdr;
- bool ret = true;
if (readElfHeader(&ehdr) == false)
return false;
@@ -319,29 +318,26 @@ bool DLObject::load() {
return false;
}
- shdr = loadSectionHeaders(&ehdr);
+ Common::ScopedPtrC<Elf32_Shdr> shdr(loadSectionHeaders(&ehdr));
if (!shdr)
return false;
- if (ret && ((_symtab_sect = loadSymbolTable(&ehdr, shdr)) < 0))
- ret = false;
-
- if (ret && !loadStringTable(shdr))
- ret = false;
-
- if (ret) {
- // Offset by our segment allocated address
- // must use _segmentVMA here for multiple segments (MIPS)
- _segmentOffset = ptrdiff_t(_segment) - _segmentVMA;
- relocateSymbols(_segmentOffset);
- }
-
- if (ret && !relocateRels(&ehdr, shdr))
- ret = false;
+ _symtab_sect = loadSymbolTable(&ehdr, shdr);
+ if (_symtab_sect < 0)
+ return false;
+
+ if (!loadStringTable(shdr))
+ return false;
+
+ // Offset by our segment allocated address
+ // must use _segmentVMA here for multiple segments (MIPS)
+ _segmentOffset = ptrdiff_t(_segment) - _segmentVMA;
+ relocateSymbols(_segmentOffset);
- free(shdr);
+ if (!relocateRels(&ehdr, shdr))
+ return false;
- return ret;
+ return true;
}
bool DLObject::open(const char *path) {