aboutsummaryrefslogtreecommitdiff
path: root/src/lib/delivery/delivery_install.c
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@users.noreply.github.com>2026-04-23 13:48:57 -0400
committerGitHub <noreply@github.com>2026-04-23 13:48:57 -0400
commit017bc273aedf3f20512beeb78a2f513913e56305 (patch)
tree8450c64203a0b85d8e447974417c1bebce64fb3e /src/lib/delivery/delivery_install.c
parentd91c7bd6a35e2d979aeb1c2d11c6d8a21b57e173 (diff)
parent3c343e07936414981d5157b9713ff9b774b57fc5 (diff)
downloadstasis-017bc273aedf3f20512beeb78a2f513913e56305.tar.gz
Merge pull request #136 from jhunkeler/cmake-git-version-fixups
Bug Hunt 0x1000
Diffstat (limited to 'src/lib/delivery/delivery_install.c')
-rw-r--r--src/lib/delivery/delivery_install.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/src/lib/delivery/delivery_install.c b/src/lib/delivery/delivery_install.c
index 1e2b82c..22b3752 100644
--- a/src/lib/delivery/delivery_install.c
+++ b/src/lib/delivery/delivery_install.c
@@ -128,6 +128,11 @@ int delivery_overlay_packages_from_env(struct Delivery *ctx, const char *env_nam
return 0;
}
+static int fn_nop(const char *command) {
+ (void) command;
+ return 1;
+}
+
int delivery_purge_packages(struct Delivery *ctx, const char *env_name, int use_pkg_manager) {
int status = 0;
char subcommand[100] = {0};
@@ -158,6 +163,7 @@ int delivery_purge_packages(struct Delivery *ctx, const char *env_name, int use_
break;
default:
SYSERROR("Unknown package manager: %d", use_pkg_manager);
+ fn = fn_nop;
status = -1;
break;
}
@@ -175,11 +181,12 @@ int delivery_purge_packages(struct Delivery *ctx, const char *env_name, int use_
SYSERROR("%s removal operation failed", package_manager);
guard_free(command);
status = 1;
- break;
+ goto cleanup;
}
guard_free(command);
}
+ cleanup:
if (current_env) {
conda_activate(ctx->storage.conda_install_prefix, current_env);
guard_free(current_env);
@@ -213,6 +220,11 @@ int delivery_install_packages(struct Delivery *ctx, char *conda_install_dir, cha
runner = pip_exec;
}
+ if (!runner) {
+ SYSERROR("Invalid callback runner of type: %d", type);
+ return -1;
+ }
+
if (INSTALL_PKG_CONDA_DEFERRED & type) {
strncat(command_base, " --use-local", sizeof(command_base) - strlen(command_base) - 1);
} else if (INSTALL_PKG_PIP_DEFERRED & type) {
@@ -222,9 +234,7 @@ int delivery_install_packages(struct Delivery *ctx, char *conda_install_dir, cha
if (!ctx->meta.based_on) {
strncat(command_base, " --upgrade", sizeof(command_base) - strlen(command_base) - 1);
}
- const char *command_base_fmt = " --extra-index-url 'file://%s'";
- const int len = snprintf(NULL, 0, command_base_fmt, ctx->storage.wheel_artifact_dir);
- snprintf(command_base + strlen(command_base), sizeof(command_base) - len, command_base_fmt, ctx->storage.wheel_artifact_dir);
+ snprintf(command_base + strlen(command_base), sizeof(command_base), " --extra-index-url 'file://%s'", ctx->storage.wheel_artifact_dir);
}
size_t args_alloc_len = STASIS_BUFSIZ;
@@ -308,7 +318,7 @@ int delivery_install_packages(struct Delivery *ctx, char *conda_install_dir, cha
return -1;
}
}
- snprintf(args + strlen(args), required_len + 1, fmt, req, info->version);
+ snprintf(args + strlen(args), args_alloc_len - strlen(args), fmt, req, info->version);
} else {
fprintf(stderr, "Deferred package '%s' is not present in the tested package list!\n", name);
guard_free(args);
@@ -326,7 +336,7 @@ int delivery_install_packages(struct Delivery *ctx, char *conda_install_dir, cha
return -1;
}
}
- snprintf(args + strlen(args), required_len + 1, fmt, name);
+ snprintf(args + strlen(args), args_alloc_len - strlen(args), fmt, name);
} else {
const char *fmt_append = "%s '%s'";
const char *fmt = " '%s'";
@@ -338,7 +348,7 @@ int delivery_install_packages(struct Delivery *ctx, char *conda_install_dir, cha
return -1;
}
}
- snprintf(args + strlen(args), required_len + 1, fmt, name);
+ snprintf(args + strlen(args), args_alloc_len - strlen(args), fmt, name);
}
}
}