From 198cde49db902ee97775c74c5cfd971b07cb0c78 Mon Sep 17 00:00:00 2001 From: dacctal Date: Wed, 3 Jun 2026 15:01:21 +0000 Subject: install and remove commands are much more customizable :) --- src/remove_pkg.c | 117 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 66 insertions(+), 51 deletions(-) (limited to 'src/remove_pkg.c') diff --git a/src/remove_pkg.c b/src/remove_pkg.c index 31627f9..1dc39db 100644 --- a/src/remove_pkg.c +++ b/src/remove_pkg.c @@ -1,72 +1,87 @@ +#include #include #include #include -#include #include -#include +#include +#include "lua_state.h" #include "remove_pkg.h" #include "vars.h" -static int remove_installed(const char *src_path, const struct stat *sb, int typeflag, struct FTW *ftwbuf) { - (void)sb; - (void)ftwbuf; +static int remove_installed(const char *src_path, const struct stat *sb, + int typeflag, struct FTW *ftwbuf) { + (void)sb; + (void)ftwbuf; - if (typeflag == FTW_F) { - const char *filename = src_path + ftwbuf->base; - const char *ext = strrchr(filename, '.'); - if (!ext) ext = ""; + if (typeflag == FTW_F) { + const char *filename = src_path + ftwbuf->base; + const char *ext = strrchr(filename, '.'); + if (!ext) + ext = ""; - if (strncmp(ext, ".so", 3) == 0) { - char dest[MAX_PATH_LEN]; - snprintf(dest, sizeof(dest), "%s/%s", get_install_dir("lib"), filename); - if (file_exists(dest)) remove(dest); - } else if (access(src_path, X_OK) == 0) { - if (strcmp(ext, ".sample") != 0 && strcmp(filename, "bldit") != 0 && - strcmp(filename, "build.sh") != 0 && strcmp(filename, "compile.sh") != 0) { - char dest[MAX_PATH_LEN]; - snprintf(dest, sizeof(dest), "%s/%s", get_install_dir("bin"), filename); - if (file_exists(dest)) remove(dest); - } - } else if (strcmp(ext, ".h") == 0) { - char dest[MAX_PATH_LEN]; - snprintf(dest, sizeof(dest), "%s/%s", get_install_dir("include"), filename); - if (file_exists(dest)) remove(dest); - } + if (strncmp(ext, ".so", 3) == 0) { + char dest[MAX_PATH_LEN]; + snprintf(dest, sizeof(dest), "%s/%s", get_install_dir("lib"), filename); + if (file_exists(dest)) + remove(dest); + } else if (access(src_path, X_OK) == 0) { + if (strcmp(ext, ".sample") != 0 && strcmp(filename, "bldit") != 0 && + strcmp(filename, "build.sh") != 0 && + strcmp(filename, "compile.sh") != 0) { + char dest[MAX_PATH_LEN]; + snprintf(dest, sizeof(dest), "%s/%s", get_install_dir("bin"), filename); + if (file_exists(dest)) + remove(dest); + } + } else if (strcmp(ext, ".h") == 0) { + char dest[MAX_PATH_LEN]; + snprintf(dest, sizeof(dest), "%s/%s", get_install_dir("include"), + filename); + if (file_exists(dest)) + remove(dest); } + } - return 0; + return 0; } -static int remove_tree(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf) { - (void)sb; - (void)ftwbuf; - if (typeflag == FTW_F || typeflag == FTW_SL) { - unlink(fpath); - } else if (typeflag == FTW_DP) { - rmdir(fpath); - } - return 0; +static int remove_tree(const char *fpath, const struct stat *sb, int typeflag, + struct FTW *ftwbuf) { + (void)sb; + (void)ftwbuf; + if (typeflag == FTW_F || typeflag == FTW_SL) { + unlink(fpath); + } else if (typeflag == FTW_DP) { + rmdir(fpath); + } + return 0; } void remove_pkg(Pkg pkg) { - if (!file_exists(pkg.src)) { - printf("%s%s is not installed!\n", print_pkgit, pkg.name); - return; - } + if (!file_exists(pkg.src)) { + printf("%s%s is not installed!\n", print_pkgit, pkg.name); + return; + } + chdir(pkg.src); - nftw(pkg.src, remove_installed, 64, FTW_PHYS); - - const char *last_slash = strrchr(pkg.src, '/'); - char target[MAX_PATH_LEN]; - if (last_slash && last_slash != pkg.src) { - size_t parent_len = last_slash - pkg.src; - snprintf(target, sizeof(target), "%.*s", (int)parent_len, pkg.src); - } else { - snprintf(target, sizeof(target), "%s", pkg.src); - } + if (repo_uninstall(pkg.name)) return; + if (bldit_uninstall(pkg.target)) return; + if (config_uninstall(pkg.src)) return; - nftw(target, remove_tree, 64, FTW_DEPTH | FTW_PHYS); + printf("%sno uninstall function availible for package: %s\n", + print_error, pkg.name); + return; - printf("%sremoved %s\n", print_pkgit, pkg.name); + //nftw(pkg.src, remove_installed, 64, FTW_PHYS); + //const char *last_slash = strrchr(pkg.src, '/'); + //char target[MAX_PATH_LEN]; + //if (last_slash && last_slash != pkg.src) { + // size_t parent_len = last_slash - pkg.src; + // snprintf(target, sizeof(target), "%.*s", (int)parent_len, pkg.src); + //} else { + // snprintf(target, sizeof(target), "%s", pkg.src); + //} + //nftw(target, remove_tree, 64, FTW_DEPTH | FTW_PHYS); + //printf("%sremoved %s\n", print_pkgit, pkg.name); } \ No newline at end of file -- cgit v1.2.3