aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordacctal <donotcontactmevia@email.invalid>2026-07-17 01:50:49 +0000
committerdacctal <donotcontactmevia@email.invalid>2026-07-17 01:50:49 +0000
commit76ee567986a12c22e6a606d74e31425facf9f5f4 (patch)
tree00ace954ed8ffb89fb780b0dfeb22a31a01d0244
parent7019724ab5c818e18fb5ee61b6b14487c47da3ec (diff)
can install/remove packages, doesn't segfault (?)
-rw-r--r--include/pkg.h2
-rw-r--r--src/parse_args.c36
-rw-r--r--src/pkg_create.c65
-rw-r--r--src/pkg_free.c1
-rw-r--r--src/pkg_install.c30
-rw-r--r--src/pkg_remove.c8
6 files changed, 71 insertions, 71 deletions
diff --git a/include/pkg.h b/include/pkg.h
index 9cb3944..5ad88b2 100644
--- a/include/pkg.h
+++ b/include/pkg.h
@@ -27,7 +27,7 @@ typedef struct {
bool is_local;
} package_t;
-package_t pkg_create(str_slc arg);
+package_t pkg_create(str *arg);
void pkg_free(package_t *pkg);
#endif
diff --git a/src/parse_args.c b/src/parse_args.c
index 61e1fcb..0d283b5 100644
--- a/src/parse_args.c
+++ b/src/parse_args.c
@@ -27,18 +27,11 @@
#include "globs.h"
#include "log.h"
#include "str.h"
-// #include "declare.h"
// #include "easter_egg.h"
#include "help.h"
#include "pkg.h"
-// #include "pkg_search.h"
-// #include "pkg_install.h"
#include "pkgit_lua.h"
-// #include "pkg_list.h"
-// #include "pkg_remove.h"
-// #include "pkgit_globals.h"
#include "add_repo.h"
-// #include "update.h"
#define COMMAND(large, small) \
(!strcmp(argv[i], large) || !strcmp(argv[i], small))
@@ -48,9 +41,8 @@
void cmd_add(char **argv, int i) {
if (argv[i + 1]) {
- printf("add repo %s\n", argv[i + 1]);
- str_slc arg = mstrslc(argv[i + 1]);
- package_t pkg = pkg_create(arg);
+ str arg = mstr(argv[i + 1]);
+ package_t pkg = pkg_create(&arg);
add_repo(&pkg);
pkg_free(&pkg);
} else {
@@ -63,14 +55,14 @@ void cmd_build(int argc, char **argv, int i) {
for (int j = i + 1; j < argc; j++) {
if (argv[j][0] == '-')
continue;
- str_slc arg = mstrslc(argv[j]);
- package_t pkg = pkg_create(arg);
+ str arg = mstr(argv[j]);
+ package_t pkg = pkg_create(&arg);
build(&pkg);
pkg_free(&pkg);
}
} else {
- str_slc arg = mstrslc(".");
- package_t pkg = pkg_create(arg);
+ str arg = mstr(".");
+ package_t pkg = pkg_create(&arg);
build(&pkg);
pkg_free(&pkg);
}
@@ -81,8 +73,8 @@ void cmd_install(int argc, char **argv, int i) {
for (int j = i + 1; j < argc; j++) {
if (argv[j][0] == '-')
continue;
- str_slc arg = mstrslc(argv[j]);
- package_t pkg = pkg_create(arg);
+ str arg = mstr(argv[j]);
+ package_t pkg = pkg_create(&arg);
pkg_install(&pkg);
pkg_free(&pkg);
}
@@ -94,12 +86,11 @@ void cmd_install(int argc, char **argv, int i) {
void cmd_remove(int argc, char **argv, int i) {
if (argv[i + 1]) {
for (int j = i + 1; j < argc; j++) {
- if (argv[j][0] == '-')
- continue;
- printf("remove pkg %s\n", argv[j]);
- // str_slc arg = mstrslc(argv[j]);
- // package_t pkg = pkg_create(arg);
- // pkg_remove(pkg);
+ if (argv[j][0] == '-') continue;
+ str arg = mstr(argv[j]);
+ package_t pkg = pkg_create(&arg);
+ pkg_remove(&pkg);
+ pkg_free(&pkg);
}
} else {
NOT_ENOUGH_ARGS(argv[i], "url/pkg");
@@ -171,7 +162,6 @@ void parse_cmds(int argc, char **argv) {
}
void parse_args(int argc, char **argv) {
- // default
flags.force = false;
flags.verbose = true;
if (argc == 1) {
diff --git a/src/pkg_create.c b/src/pkg_create.c
index 728a955..df10c46 100644
--- a/src/pkg_create.c
+++ b/src/pkg_create.c
@@ -27,14 +27,16 @@
#include "pkgit_lua.h"
#include "str.h"
-str new_arg_str;
-
-static str get_destdir(str_slc cwd, str_slc arg) {
- str_slc name = str_slc_from_after_delim(arg, '/');
- if (str_slc_first(arg) == '.')
- return str_format("%.*s/%.*s", str_fmt(&inst_dirs.src), str_fmt(&cwd));
- else
- return str_format("%.*s/%.*s", str_fmt(&inst_dirs.src), str_fmt(&name));
+static str get_destdir(str *cwd, str *arg) {
+ str result;
+ if (str_first(arg) == '.') {
+ result = str_format("%.*s/%.*s", str_fmt(&inst_dirs.src), str_fmt(cwd));
+ } else {
+ str name = str_from_after_delim(arg, '/');
+ result = str_format("%.*s/%.*s", str_fmt(&inst_dirs.src), str_fmt(&name));
+ str_free(&name);
+ }
+ return result;
}
static str get_pkgsrc(package_t pkg) {
@@ -81,59 +83,54 @@ static void assign_pkg_target(package_t *pkg, str *new_arg_str) {
} else pkg->target = mstr("default");
}
-package_t pkg_create(str_slc arg) {
+package_t pkg_create(str *arg) {
package_t pkg = { .is_local = false, };
char cwd[MAX_PATH_LEN];
getcwd(cwd, MAX_PATH_LEN);
- str_slc cwd_slc = mstrslc(cwd);
str cwd_str = mstr(cwd);
- str dest_dir = get_destdir(cwd_slc, arg);
- str tmp_str = str_from_str_slc(arg);
- str_copy_into(&new_arg_str, &tmp_str);
- str_free(&tmp_str);
+ str dest_dir = get_destdir(&cwd_str, arg);
bool is_installed_locally = is_directory(dest_dir.data);
- bool is_in_repos = pkg_exists(&new_arg_str);
- assign_pkg_version(&pkg, &new_arg_str);
- assign_pkg_target(&pkg, &new_arg_str);
- if (str_find_char(&new_arg_str, '@')) {
- str tmp = str_from_after_delim(&new_arg_str, '@');
- new_arg_str.len -= tmp.len + 1;
+ assign_pkg_version(&pkg, arg);
+ assign_pkg_target(&pkg, arg);
+ if (str_find_char(arg, '@')) {
+ str tmp = str_from_after_delim(arg, '@');
+ arg->len -= tmp.len + 1;
str_free(&tmp);
- } if (str_find_char(&new_arg_str, ',')) {
- str tmp = str_from_after_delim(&new_arg_str, ',');
- new_arg_str.len -= tmp.len + 1;
+ } if (str_find_char(arg, ',')) {
+ str tmp = str_from_after_delim(arg, ',');
+ arg->len -= tmp.len + 1;
str_free(&tmp);
}
- if (strncmp(arg.data, "http", 4) == 0 || strncmp(arg.data, "ssh", 3) == 0) {
- pkg.url = new_arg_str;
- pkg.name = str_from_after_delim(&new_arg_str, '/');
- } else if (str_slc_equal_cstr(arg, ".")) {
+ if (strncmp(arg->data, "http", 4) == 0 || strncmp(arg->data, "ssh", 3) == 0) {
+ pkg.url = *arg;
+ pkg.name = str_from_after_delim(arg, '/');
+ } else if (str_equal_cstr(arg, ".")) {
pkg.url = mstr("");
pkg.name = str_from_after_delim(&cwd_str, '/');
pkg.is_local = true;
- } else if (is_in_repos) {
- str tmp_url = pkg_get_url(&new_arg_str);
+ } else if (pkg_exists(arg)) {
+ str tmp_url = pkg_get_url(arg);
str_copy_into(&pkg.url, &tmp_url);
str_free(&tmp_url);
- pkg.name = new_arg_str;
+ pkg.name = *arg;
} else if (is_installed_locally) {
pkg.url = mstr("");
pkg.name = str_from_after_delim(&dest_dir, '/');
pkg.is_local = true;
} else {
- log_error("'%.*s' is not a valid package", str_fmt(&arg));
+ log_error("'%.*s' is not a valid package", str_fmt(arg));
str_free(&cwd_str);
str_free(&dest_dir);
- str_free(&new_arg_str);
+ str_free(arg);
exit(EXIT_FAILURE);
}
- if (str_find_char(&new_arg_str, ',')
- && str_find_char(&new_arg_str, '@')
+ if (str_find_char(arg, ',')
+ && str_find_char(arg, '@')
) pkg.name.len--;
pkg.src = get_pkgsrc(pkg);
diff --git a/src/pkg_free.c b/src/pkg_free.c
index 12659fe..5944c4d 100644
--- a/src/pkg_free.c
+++ b/src/pkg_free.c
@@ -7,5 +7,4 @@ void pkg_free(package_t *pkg) {
str_free(&pkg->version);
str_free(&pkg->target);
str_free(&pkg->src);
- str_free(&new_arg_str);
}
diff --git a/src/pkg_install.c b/src/pkg_install.c
index b727d01..6a8f774 100644
--- a/src/pkg_install.c
+++ b/src/pkg_install.c
@@ -36,13 +36,13 @@ void install_dependencies(lua_State *L) {
const char *depname = lua_tostring(L, -2);
if (depname && lua_istable(L, -1)) {
lua_getfield(L, -1, "url");
- str_slc dep_url = mstrslc(lua_tostring(L, -1));
+ str dep_url = mstr(lua_tostring(L, -1));
lua_pop(L, 1);
+ package_t pkg = pkg_create(&dep_url);
+ str_free(&dep_url);
lua_getfield(L, -1, "version");
- str_slc dep_version = mstrslc(lua_tostring(L, -1));
+ pkg.version = mstr(lua_tostring(L, -1));
lua_pop(L, 1);
- package_t pkg = pkg_create(dep_url);
- pkg.version = str_from_str_slc(dep_version);
const int top = lua_gettop(L);
char cwd[MAX_PATH_LEN];
if (getcwd(cwd, sizeof(cwd)) != NULL) {
@@ -157,21 +157,33 @@ void pkg_install(package_t *pkg) {
//} else {
log_pkgit("fetching " GREEN "%.*s" COLOR_RESET , str_fmt(&pkg->name));
if (!fetch(pkg)) return;
- log_pkgit("fetched " GREEN "%.*s" COLOR_RESET , str_fmt(&pkg->name));
+ if (flags.verbose) log_pkgit("fetched " GREEN "%.*s" COLOR_RESET , str_fmt(&pkg->name));
//}
log_pkgit("building " GREEN "%.*s" COLOR_RESET , str_fmt(&pkg->name));
if (!build(pkg)) return;
- log_pkgit("built " GREEN "%.*s" COLOR_RESET , str_fmt(&pkg->name));
+ if (flags.verbose) log_pkgit("built " GREEN "%.*s" COLOR_RESET , str_fmt(&pkg->name));
bool install_success = false;
- log_info("attempting init.lua: 'repositories.%.*s.install'", str_fmt(&pkg->name));
+ if (flags.verbose)
+ log_info(
+ "attempting init.lua: 'repositories.%.*s.install'",
+ str_fmt(&pkg->name)
+ );
if (!install_success && repo_install(pkg))
install_success = true;
- log_info("attempting bldit.lua: 'repositories.%.*s.install'", str_fmt(&pkg->name));
+ if (flags.verbose)
+ log_info(
+ "attempting bldit.lua: 'repositories.%.*s.install'",
+ str_fmt(&pkg->name)
+ );
if (!install_success && bldit_install(pkg))
install_success = true;
- log_info("attempting init.lua: 'build_systems'", str_fmt(&pkg->name));
+ if (flags.verbose)
+ log_info(
+ "attempting init.lua: 'build_systems'",
+ str_fmt(&pkg->name)
+ );
if (!install_success && config_install(pkg))
install_success = true;
if (!install_success) {
diff --git a/src/pkg_remove.c b/src/pkg_remove.c
index 1d4be14..bec7a8f 100644
--- a/src/pkg_remove.c
+++ b/src/pkg_remove.c
@@ -164,7 +164,7 @@ static int remove_tree(
return 0;
}
-void remove_pkg(package_t *pkg) {
+void pkg_remove(package_t *pkg) {
if (!is_directory(pkg->src.data)) {
log_error("%.*s is not installed!", str_fmt(&pkg->name));
return;
@@ -179,11 +179,13 @@ void remove_pkg(package_t *pkg) {
if (!uninstall_available) if (config_uninstall(pkg))
uninstall_available = true;
- if (!uninstall_available)
+ if (!uninstall_available) {
log_error(
"no uninstall function availible for package: %.*s",
str_fmt(&pkg->name)
);
+ return;
+ }
nftw(pkg->src.data, remove_installed, 64, FTW_PHYS);
const char *last_slash = strrchr(pkg->src.data, '/');
@@ -195,5 +197,5 @@ void remove_pkg(package_t *pkg) {
snprintf(target, sizeof(target), "%s", pkg->src.data);
}
nftw(pkg->src.data, remove_tree, 64, FTW_DEPTH | FTW_PHYS);
- log_success("removed %s", str_fmt(&pkg->name));
+ log_success("removed %.*s", str_fmt(&pkg->name));
}