diff --git a/require-ess/src/require.c b/require-ess/src/require.c index 879edb56a61bae1de8b8d4a109fc5ec3abfef8b7..5b09b5289957a968b2f5ea3ca5267988db366432 100644 --- a/require-ess/src/require.c +++ b/require-ess/src/require.c @@ -637,7 +637,8 @@ static int compareVersions(const char *found, const char *request, semver_t *sv_found, *sv_request; int match; - debug("require: compareVersions(found=%s, request=%s)\n", found, request); + debug("require: compareVersions(found=%s, request=%s)\n", found, + request ? request : ""); if (request == NULL || request[0] == 0) { debug("require: compareVersions: MATCH empty version requested\n"); @@ -895,6 +896,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; @@ -979,8 +981,8 @@ static int require_priv( /* Search for module in driverpath */ for (dirname = driverpath; dirname != NULL; dirname = end) { /* get one directory from driverpath */ - int dirlen; - int modulediroffs; + int dirlen = 0; + int modulediroffs = 0; DIR_HANDLE dir; DIR_ENTRY direntry; @@ -1019,7 +1021,7 @@ static int require_priv( /* Look for highest matching version. */ if (requireDebug) printf("require: checking version %s against required %s\n", - currentFilename, version); + currentFilename, version ? version : ""); switch ((status = compareVersions(currentFilename, version, FALSE))) { case MATCH: /* all given numbers match. */ @@ -1028,7 +1030,7 @@ static int require_priv( if (requireDebug) printf("require: %s %s may match %s\n", module, currentFilename, - version); + version ? version : ""); /* Check if it has our EPICS version and architecture. */ /* Even if it has no library, at least it has a dep file in the @@ -1138,6 +1140,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 +1210,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 +1231,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 +1268,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 = { diff --git a/require-ess/src/runScript.c b/require-ess/src/runScript.c index f54cef276a68f0fd435956d20cce86875a5b417e..3f345458e7e27061418e04d43da5ea1694364e45 100644 --- a/require-ess/src/runScript.c +++ b/require-ess/src/runScript.c @@ -49,6 +49,7 @@ int runScript(const char *filename, const char *args) { MAC_HANDLE *mac = NULL; FILE *file = NULL; char *line_raw = NULL; + char *aux_pointer = NULL; char *line_exp = NULL; long line_raw_size = 256; long line_exp_size = line_raw_size; @@ -125,8 +126,9 @@ int runScript(const char *filename, const char *args) { while (line_raw[(len = (long)strlen(line_raw)) - 1] != '\n' && !feof(file)) { if (runScriptDebug) printf("runScript partial line: \"%s\"\n", line_raw); - if ((line_raw = realloc(line_raw, line_raw_size *= 2)) == NULL) + if ((aux_pointer = realloc(line_raw, line_raw_size *= 2)) == NULL) goto error; + line_raw = aux_pointer; if (fgets(line_raw + len, line_raw_size - len, file) == NULL) break; } while (len > 0 && isspace((unsigned char)line_raw[len - 1])) diff --git a/require-ess/src/version.c b/require-ess/src/version.c index 4982e43aea63995abe95ec3efb7c3f4e6fe988b5..732f456dde9cca7d2ff87a7271fab14d15359398 100644 --- a/require-ess/src/version.c +++ b/require-ess/src/version.c @@ -52,6 +52,7 @@ semver_t *parse_semver(const char *version) { } if (regcomp(&compiled, version_regex, REG_EXTENDED)) { + regfree(&compiled); return NULL; } @@ -67,5 +68,6 @@ semver_t *parse_semver(const char *version) { s->version_str[groups[revision_ix].rm_so - 1] = 0; } } + regfree(&compiled); return s; }