aboutsummaryrefslogtreecommitdiff
path: root/src/create_pkg.c
diff options
context:
space:
mode:
authordacctal <donotcontactmevia@email.invalid>2026-06-28 05:56:56 +0000
committerdacctal <donotcontactmevia@email.invalid>2026-06-28 05:56:56 +0000
commit64e61e9b5de7546dc3bcbca577a029629774e108 (patch)
tree846bf2bf5f1dbfdd00e6f841454d6ed748770671 /src/create_pkg.c
parent0cc8a1c0faa2743acc6bc38ee8a0c6e2af4f64b1 (diff)
fixed --quiet without a matching quiet target edgecase
Diffstat (limited to 'src/create_pkg.c')
-rw-r--r--src/create_pkg.c187
1 files changed, 94 insertions, 93 deletions
diff --git a/src/create_pkg.c b/src/create_pkg.c
index 8221233..12b6a63 100644
--- a/src/create_pkg.c
+++ b/src/create_pkg.c
@@ -29,114 +29,115 @@
#include "vars.h"
bool is_in_repos(char *arg) {
- for (size_t i = 0; i < cached_repos_count; i++)
- if (strcmp(arg, cached_repos[i].source_key) == 0) return true;
- return false;
+ for (size_t i = 0; i < cached_repos_count; i++)
+ if (strcmp(arg, cached_repos[i].source_key) == 0)
+ return true;
+ return false;
}
Pkg pkg_from_repo(char* arg) {
- Pkg pkg = {0};
- for (size_t i = 0; i < cached_repos_count; i++) {
- if (strcmp(arg, cached_repos[i].source_key) == 0) {
- pkg.url = strdup(cached_repos[i].source_value);
- break;
- }
- }
- pkg.name = arg;
- return pkg;
+ Pkg pkg = {0};
+ for (size_t i = 0; i < cached_repos_count; i++) {
+ if (strcmp(arg, cached_repos[i].source_key) == 0) {
+ pkg.url = strdup(cached_repos[i].source_value);
+ break;
+ }
+ }
+ pkg.name = arg;
+ return pkg;
}
char* get_destdir(char* cwd, char* arg) {
- char dest_dir[MAX_PATH_LEN];
- if (arg[0] == '.') {
- snprintf(dest_dir, sizeof(dest_dir), "%s/%s",
- get_install_dir("src"), name_from_url(cwd));
- } else {
- snprintf(dest_dir, sizeof(dest_dir), "%s/%s",
- get_install_dir("src"), arg);
- }
- return strdup(dest_dir);
+ char dest_dir[MAX_PATH_LEN];
+ if (arg[0] == '.') {
+ snprintf(dest_dir, sizeof(dest_dir), "%s/%s",
+ get_install_dir("src"), name_from_url(cwd));
+ } else {
+ snprintf(dest_dir, sizeof(dest_dir), "%s/%s",
+ get_install_dir("src"), arg);
+ }
+ return strdup(dest_dir);
}
void rmdotgit(Pkg pkg) {
- if (strlen(pkg.name) > 4 &&
- strncmp(pkg.name + strlen(pkg.name) - 4, ".git", 4) == 0)
- pkg.name[strlen(pkg.name) - 4] = '\0';
+ if (
+ strlen(pkg.name) > 4 &&
+ strncmp(pkg.name + strlen(pkg.name) - 4, ".git", 4) == 0
+ ) pkg.name[strlen(pkg.name) - 4] = '\0';
}
char* get_pkgsrc(Pkg pkg) {
- char src_dir[MAX_PATH_LEN];
- if (pkg.is_local) {
- snprintf(src_dir, sizeof(src_dir), "%s/%s",
- get_install_dir("src"), pkg.name);
- } else {
- snprintf(src_dir, sizeof(src_dir), "%s/%s/%s",
- get_install_dir("src"), pkg.name, pkg.ver);
- }
- return strdup(src_dir);
+ char src_dir[MAX_PATH_LEN];
+ if (pkg.is_local) {
+ snprintf(src_dir, sizeof(src_dir), "%s/%s",
+ get_install_dir("src"), pkg.name);
+ } else {
+ snprintf(src_dir, sizeof(src_dir), "%s/%s/%s",
+ get_install_dir("src"), pkg.name, pkg.ver);
+ }
+ return strdup(src_dir);
}
Pkg create_pkg(const char *arg) {
- Pkg pkg = {0};
- pkg.ver = "HEAD";
- pkg.is_local = false;
+ Pkg pkg = {0};
+ pkg.ver = "HEAD";
+ pkg.is_local = false;
char cwd[MAX_PATH_LEN];
getcwd(cwd, MAX_PATH_LEN);
- char *new_arg = strdup(arg);
- if (!new_arg) exit(EXIT_FAILURE);
- char* dest_dir = get_destdir(cwd, new_arg);
- bool is_installed_locally = false;
- if (is_directory(dest_dir)) is_installed_locally = true;
-
- char *verptr = strchr(new_arg, '@');
- char *trgptr = strchr(new_arg, ',');
- for (size_t i = 0; i < cached_repos_count; i++) {
- if (strcmp(cached_repos[i].source_key, new_arg) != 0) continue;
- pkg.ver = cached_repos[i].version;
- }
- if (verptr) {
- pkg.ver = verptr + 1;
- *verptr = '\0';
- }
- if (trgptr) {
- pkg.target = trgptr + 1;
- *trgptr = '\0';
- } else {
- pkg.target = is_verbose ? "default" : "quiet";
- }
-
- bool is_in_repos = false;
- for (size_t i = 0; i < cached_repos_count; i++) {
- if (strcmp(new_arg, cached_repos[i].source_key) == 0) {
- is_in_repos = true;
- break;
- }
- }
-
- if (strncmp(new_arg, "http", 4) == 0 || strncmp(new_arg, "ssh", 3) == 0) {
- pkg.url = strdup(new_arg);
- pkg.name = name_from_url(new_arg);
- } else if (strcmp(new_arg, ".") == 0) {
- pkg.url = "";
- pkg.name = name_from_url(cwd);
- pkg.is_local = true;
- } else if (is_in_repos) {
- for (size_t i = 0; i < cached_repos_count; i++) {
- if (strcmp(new_arg, cached_repos[i].source_key) == 0) {
- pkg.url = strdup(cached_repos[i].source_value);
- break;
- }
- }
- pkg.name = new_arg;
- } else if (is_installed_locally) {
- pkg.url = "";
- pkg.name = name_from_url(dest_dir);
- pkg.is_local = true;
- } else {
- printf("%s '%s' is not a valid package\n", print_error, new_arg);
- exit(EXIT_FAILURE);
- }
- rmdotgit(pkg);
- snprintf(pkg.src, MAX_PATH_LEN, "%s", get_pkgsrc(pkg));
- return pkg;
+ char *new_arg = strdup(arg);
+ if (!new_arg) exit(EXIT_FAILURE);
+ char* dest_dir = get_destdir(cwd, new_arg);
+ bool is_installed_locally = is_directory(dest_dir);
+
+ char *verptr = strchr(new_arg, '@');
+ char *trgptr = strchr(new_arg, ',');
+ for (size_t i = 0; i < cached_repos_count; i++) {
+ if (strcmp(cached_repos[i].source_key, new_arg) != 0) continue;
+ pkg.ver = cached_repos[i].version;
+ }
+ if (verptr) {
+ pkg.ver = verptr + 1;
+ *verptr = '\0';
+ }
+ if (trgptr) {
+ pkg.target = trgptr + 1;
+ *trgptr = '\0';
+ } else {
+ pkg.target = is_verbose ? "default" : "quiet";
+ }
+
+ bool is_in_repos = false;
+ for (size_t i = 0; i < cached_repos_count; i++) {
+ if (strcmp(new_arg, cached_repos[i].source_key) == 0) {
+ is_in_repos = true;
+ break;
+ }
+ }
+
+ if (strncmp(new_arg, "http", 4) == 0 || strncmp(new_arg, "ssh", 3) == 0) {
+ pkg.url = strdup(new_arg);
+ pkg.name = name_from_url(new_arg);
+ } else if (strcmp(new_arg, ".") == 0) {
+ pkg.url = "";
+ pkg.name = name_from_url(cwd);
+ pkg.is_local = true;
+ } else if (is_in_repos) {
+ for (size_t i = 0; i < cached_repos_count; i++) {
+ if (strcmp(new_arg, cached_repos[i].source_key) == 0) {
+ pkg.url = strdup(cached_repos[i].source_value);
+ break;
+ }
+ }
+ pkg.name = new_arg;
+ } else if (is_installed_locally) {
+ pkg.url = "";
+ pkg.name = name_from_url(dest_dir);
+ pkg.is_local = true;
+ } else {
+ printf("%s '%s' is not a valid package\n", print_error, new_arg);
+ exit(EXIT_FAILURE);
+ }
+ rmdotgit(pkg);
+ snprintf(pkg.src, MAX_PATH_LEN, "%s", get_pkgsrc(pkg));
+ return pkg;
} \ No newline at end of file