aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/conda.c4
-rw-r--r--src/deliverable.c76
-rw-r--r--src/ini.c1
-rw-r--r--src/main.c10
-rw-r--r--src/system.c2
-rw-r--r--src/template.c1
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;
}
diff --git a/src/ini.c b/src/ini.c
index cca302e..53d6c6d 100644
--- a/src/ini.c
+++ b/src/ini.c
@@ -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;
}
diff --git a/src/main.c b/src/main.c
index c5e4357..9c4f76b 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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;
}