summaryrefslogtreecommitdiff
path: root/nuttx/binfmt
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx/binfmt')
-rw-r--r--nuttx/binfmt/nxflat.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/nuttx/binfmt/nxflat.c b/nuttx/binfmt/nxflat.c
index f4eac0fcf..0c179053a 100644
--- a/nuttx/binfmt/nxflat.c
+++ b/nuttx/binfmt/nxflat.c
@@ -158,7 +158,7 @@ static int nxflat_loadbinary(struct binary_s *binp)
if (ret != 0)
{
bdbg("Failed to initialize for load of NXFLT program: %d\n", ret);
- return ret;
+ goto errout;
}
/* Load the program binary */
@@ -168,8 +168,7 @@ static int nxflat_loadbinary(struct binary_s *binp)
if (ret != 0)
{
bdbg("Failed to load NXFLT program binary: %d\n", ret);
- nxflat_uninit(&loadinfo);
- return ret;
+ goto errout_with_init;
}
/* Bind the program to the exported symbol table */
@@ -178,8 +177,7 @@ static int nxflat_loadbinary(struct binary_s *binp)
if (ret != 0)
{
bdbg("Failed to bind symbols program binary: %d\n", ret);
- nxflat_uninit(&loadinfo);
- return ret;
+ goto errout_with_load;
}
/* Return the load information */
@@ -192,8 +190,16 @@ static int nxflat_loadbinary(struct binary_s *binp)
nxflat_dumpbuffer("Entry code", (FAR const ubyte*)binp->entrypt,
MIN(binp->isize - loadinfo.entryoffs,512));
+
nxflat_uninit(&loadinfo);
return OK;
+
+errout_with_load:
+ nxflat_unload(&loadinfo);
+errout_with_init:
+ nxflat_uninit(&loadinfo);
+errout:
+ return ret;
}
/***********************************************************************