diff options
| -rw-r--r-- | src/conda.c | 4 | ||||
| -rw-r--r-- | src/deliverable.c | 76 | ||||
| -rw-r--r-- | src/ini.c | 1 | ||||
| -rw-r--r-- | src/main.c | 10 | ||||
| -rw-r--r-- | src/system.c | 2 | ||||
| -rw-r--r-- | src/template.c | 1 | 
6 files changed, 77 insertions, 17 deletions
| diff --git a/src/conda.c b/src/conda.c index acec709..87b32d4 100644 --- a/src/conda.c +++ b/src/conda.c @@ -185,8 +185,12 @@ int conda_check_required() {              }          }          if (found < (sizeof(tools) / sizeof(*tools)) - 1) { +            guard_free(cmd_out) +            guard_strlist_free(result)              return 1;          } +        guard_free(cmd_out) +        guard_strlist_free(result)      } else {          msg(OMC_MSG_ERROR | OMC_MSG_L2, "The base package requirement check could not be performed\n");          return 2; diff --git a/src/deliverable.c b/src/deliverable.c index 1860ee6..4be3e51 100644 --- a/src/deliverable.c +++ b/src/deliverable.c @@ -22,41 +22,61 @@ extern char **environ;      }  #define conv_int(X, DEST) X->DEST = val.as_int; +  #define conv_str(X, DEST) { \ -    char *tplop = tpl_render(runtime_expand_var(NULL, val.as_char_p)); \ +    char *rtevnop = runtime_expand_var(NULL, val.as_char_p); \ +    char *tplop = tpl_render(rtevnop); \      if (tplop) { \          X->DEST = tplop; \      } else { \          X->DEST = val.as_char_p; \      } \ +    guard_free(rtevnop) \  } +  #define conv_str_noexpand(X, DEST) if (val.as_char_p) X->DEST = strdup(val.as_char_p); +  #define conv_strlist(X, DEST, TOK) { \ -    char *rtevnop = tpl_render(runtime_expand_var(NULL, val.as_char_p)); \ +    char *rtevnop = runtime_expand_var(NULL, val.as_char_p); \ +    char *tplop = tpl_render(rtevnop); \      if (!X->DEST) \          X->DEST = strlist_init(); \ -    if (rtevnop) {                   \ -        strip(rtevnop); \ -        strlist_append_tokenize(X->DEST, rtevnop, TOK); \ -        guard_free(rtevnop) \ +    if (tplop) { \ +        strip(tplop); \ +        strlist_append_tokenize(X->DEST, tplop, TOK); \ +        guard_free(tplop) \      } else { \          rtevnop = NULL; \      } \ +    guard_free(rtevnop) \  } +  #define conv_bool(X, DEST) X->DEST = val.as_bool; -#define conv_str_stackvar(X, DEST) X.DEST = tpl_render(runtime_expand_var(NULL, val.as_char_p)); +#define conv_str_stackvar(X, DEST) { \ +    char *rtevnop = runtime_expand_var(NULL, val.as_char_p); \ +    char *tplop = tpl_render(rtevnop);                       \ +    if (tplop) { \ +        X.DEST = tplop; \ +    } else { \ +        X.DEST = val.as_char_p; \ +    } \ +    guard_free(rtevnop) \ +} +  #define conv_strlist_stackvar(X, DEST, TOK) { \ -    char *rtevnop = tpl_render(runtime_expand_var(NULL, val.as_char_p)); \ +    char *rtevnop = runtime_expand_var(NULL, val.as_char_p); \ +    char *tplop = tpl_render(rtevnop); \      if (!X.DEST) \          X.DEST = strlist_init(); \ -    if (rtevnop) {                   \ -        strip(rtevnop); \ -        strlist_append_tokenize(X.DEST, rtevnop, TOK); \ -        guard_free(rtevnop) \ +    if (tplop) { \ +        strip(tplop); \ +        strlist_append_tokenize(X.DEST, tplop, TOK); \ +        guard_free(tplop) \      } else { \          rtevnop = NULL; \      } \ +    guard_free(rtevnop); \  }  #define conv_bool_stackvar(X, DEST) X.DEST = val.as_bool; @@ -133,6 +153,7 @@ void delivery_free(struct Delivery *ctx) {      guard_free(ctx->storage.tmpdir)      guard_free(ctx->storage.delivery_dir)      guard_free(ctx->storage.tools_dir) +    guard_free(ctx->storage.package_dir)      guard_free(ctx->storage.conda_install_prefix)      guard_free(ctx->storage.conda_artifact_dir)      guard_free(ctx->storage.conda_staging_dir) @@ -145,6 +166,10 @@ void delivery_free(struct Delivery *ctx) {      guard_free(ctx->storage.build_sources_dir)      guard_free(ctx->storage.build_testing_dir)      guard_free(ctx->storage.mission_dir) +    guard_free(ctx->info.time_str_epoch) +    guard_free(ctx->info.build_name) +    guard_free(ctx->info.build_number) +    guard_free(ctx->info.release_name)      guard_free(ctx->conda.installer_baseurl)      guard_free(ctx->conda.installer_name)      guard_free(ctx->conda.installer_version) @@ -161,11 +186,22 @@ void delivery_free(struct Delivery *ctx) {          guard_free(ctx->tests[i].name)          guard_free(ctx->tests[i].version)          guard_free(ctx->tests[i].repository) +        guard_free(ctx->tests[i].repository_info_ref) +        guard_free(ctx->tests[i].repository_info_tag)          guard_free(ctx->tests[i].script)          guard_free(ctx->tests[i].build_recipe)          // test-specific runtime variables          guard_runtime_free(ctx->tests[i].runtime.environ)      } + +    guard_free(ctx->rules.release_fmt) +    guard_free(ctx->rules.build_name_fmt) +    guard_free(ctx->rules.build_number_fmt) +    ini_free(&ctx->rules._handle); + +    for (size_t i = 0; i < sizeof(ctx->tests) / sizeof(ctx->tests[0]); i++) { +        guard_strlist_free(ctx->deploy[i].files) +    }  }  void delivery_init_dirs(struct Delivery *ctx) { @@ -523,9 +559,6 @@ int delivery_init(struct Delivery *ctx, struct INIFILE *ini, struct INIFILE *cfg          }      } -    char env_name[NAME_MAX]; -    char env_date[NAME_MAX]; -      /*      if (!strcasecmp(ctx->meta.mission, "hst") && ctx->meta.final) {          memset(env_date, 0, sizeof(env_date)); @@ -1217,6 +1250,7 @@ void delivery_rewrite_spec(struct Delivery *ctx, char *filename) {          exit(1);      }      remove(tempfile); +    guard_free(tempfile);      // Replace "local" channel with the staging URL      if (ctx->storage.conda_staging_url) { @@ -1322,7 +1356,15 @@ void delivery_tests_run(struct Delivery *ctx) {                  memset(cmd, 0, sizeof(cmd));                  sprintf(cmd, "set -x ; %s", ctx->tests[i].script); -                status = shell(&proc, tpl_render(cmd)); +                char *cmd_rendered = tpl_render(cmd); +                if (cmd_rendered) { +                    if (strcmp(cmd_rendered, cmd) != 0) { +                        strcpy(cmd, cmd_rendered); +                    } +                    guard_free(cmd_rendered) +                } + +                status = shell(&proc, cmd);                  if (status) {                      msg(OMC_MSG_ERROR, "Script failure: %s\n%s\n\nExit code: %d\n", ctx->tests[i].name, ctx->tests[i].script, status);                      COE_CHECK_ABORT(!globals.continue_on_error, "Test failure") @@ -1572,6 +1614,8 @@ int delivery_mission_render_files(struct Delivery *ctx) {          guard_free(contents);      } +    guard_free(data.src) +    guard_free(data.dest)      return 0;  } @@ -323,7 +323,6 @@ struct INIFILE *ini_open(const char *filename) {          // no data, skip          if (!reading_value && isempty(line)) {              guard_free(value) -            value = NULL;              continue;          } @@ -113,6 +113,15 @@ void globals_free() {      guard_free(globals.conda_install_prefix)      guard_strlist_free(globals.conda_packages)      guard_strlist_free(globals.pip_packages) +    guard_free(globals.sysconfdir) +    guard_free(globals.jfrog.arch) +    guard_free(globals.jfrog.os) +    guard_free(globals.jfrog.repo) +    guard_free(globals.jfrog.version) +    guard_free(globals.jfrog.cli_major_ver) +    guard_free(globals.jfrog.jfrog_artifactory_base_url) +    guard_free(globals.jfrog.jfrog_artifactory_product) +    guard_free(globals.jfrog.remote_filename)  }  int main(int argc, char *argv[], char *arge[]) { @@ -471,6 +480,7 @@ int main(int argc, char *argv[], char *arge[]) {      delivery_free(&ctx);      globals_free();      tpl_free(); +    guard_free(config_input)      msg(OMC_MSG_L1, "Done!\n");      return 0; diff --git a/src/system.c b/src/system.c index ea34717..154bd87 100644 --- a/src/system.c +++ b/src/system.c @@ -92,6 +92,8 @@ int shell(struct Process *proc, char *args) {      if (proc != NULL) {          proc->returncode = status;      } + +    guard_free(t_name)      return WEXITSTATUS(status);  } diff --git a/src/template.c b/src/template.c index ed40e8b..a272b8a 100644 --- a/src/template.c +++ b/src/template.c @@ -184,6 +184,7 @@ int tpl_render_to_file(char *str, const char *filename) {      // Open the destination file for writing      fp = fopen(filename, "w+");      if (!fp) { +        guard_free(result)          return -1;      } | 
