diff --git a/require-ess/src/require.c b/require-ess/src/require.c index 879edb56a61bae1de8b8d4a109fc5ec3abfef8b7..2803e9296e0deb18fd6c215890c0a65c9b57b6b4 100644 --- a/require-ess/src/require.c +++ b/require-ess/src/require.c @@ -895,6 +895,7 @@ static int require_priv( const char *versionstr /* "-<version>" or "" (for old style only */ ) { int status; + int returnvalue = 0; const char *loaded = NULL; const char *found = NULL; HMODULE libhandle; @@ -1138,6 +1139,7 @@ static int require_priv( else fprintf(stderr, "Module %s%s%s not available\n", module, version ? " version " : "", version ? version : ""); + if (founddir) free(founddir); return ifexists ? 0 : -1; } @@ -1207,7 +1209,8 @@ static int require_priv( fprintf(stderr, "Requested %s version %s not available, found only %s.\n", module, version, found); - return -1; + returnvalue = -1; + goto require_priv_error; } /* load dbd file */ @@ -1227,7 +1230,8 @@ static int require_priv( printf("Loading dbd file %s\n", filename); if (dbLoadDatabase(filename, NULL, NULL) != 0) { fprintf(stderr, "Error loading %s\n", filename); - return -1; + returnvalue = -1; + goto require_priv_error; } /* when dbd is loaded call register function */ @@ -1263,12 +1267,18 @@ static int require_priv( putenvprintf("TEMPLATES=%s", globalTemplates); } + if (founddir) free(founddir); + /* no need to execute startup script twice if not with new arguments */ if (loaded && args == NULL) { return 0; } return status; + +require_priv_error: + if (founddir) free(founddir); + return returnvalue; } static const iocshFuncDef requireDef = {