From dda77e837c762ed8da49dbc5f80890629bf1cab2 Mon Sep 17 00:00:00 2001 From: Emily <36363495+jonasjaguar@users.noreply.github.com> Date: Thu, 14 Jan 2021 19:38:04 +0100 Subject: [PATCH] work on dependency type writing for installed packages ( #7 ) --- config.mk | 2 +- depresolve.c | 2 +- install.c | 1 + remove.c | 16 +++++++++++----- remove.h | 2 +- 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/config.mk b/config.mk index 85e9456..4a92c93 100644 --- a/config.mk +++ b/config.mk @@ -1,6 +1,6 @@ VERSION = 0.3 -PREFIX = +PREFIX = /usr MANPREFIX = $(PREFIX)/share/man CC = gcc diff --git a/depresolve.c b/depresolve.c index 72ba66b..0fb937a 100644 --- a/depresolve.c +++ b/depresolve.c @@ -35,7 +35,7 @@ void resolve_recursive(struct pkglist *nodelist, struct pkg_update *updatepkgs[] if (current_installed && !ignore_updates) { struct pkg_update *pkgupdt = pkg_has_update(current, database, installed); - if (pkgupdt != NULL) { + if (pkgupdt != NULL && updatepkgs != NULL) { updatepkgs[*updatec] = pkgupdt; *updatec = *updatec + 1; } diff --git a/install.c b/install.c index de59911..889d2d6 100644 --- a/install.c +++ b/install.c @@ -355,6 +355,7 @@ int install_no_deps(struct package *currpkg, struct pkglist *database, int manua } int add_db_entry(struct package *package, int manual_installed, struct pkglist *database) { + // TODO: Write Dependency Types to package->depends field struct stat st = {0}; // compute path diff --git a/remove.c b/remove.c index f8582f1..f3a1ffc 100644 --- a/remove.c +++ b/remove.c @@ -14,7 +14,7 @@ int pkg_remove(int pkgc, char *pkgnames[]) { } } if (!package_installed) { - printf("Error: package %s is not installed", pkgnames[i]); + fprintf(stderr, "Error: package %s is not installed", pkgnames[i]); return 1; } } @@ -35,7 +35,7 @@ int pkg_remove(int pkgc, char *pkgnames[]) { // remove requested packages for (int i = 2; i < pkgc; i++) { - retval += remove_single(pkgnames[i], installed); + retval += remove_single(pkgnames[i], installed, database); } retval += write_installed_packages(installed, database); @@ -47,24 +47,30 @@ int pkg_remove(int pkgc, char *pkgnames[]) { return 0; } -int remove_single(char pkgname[], struct pkglist *installed) { +int remove_single(char pkgname[], struct pkglist *installed, struct pkglist *database) { struct package *currpkg; int *i; if (!(i = malloc(sizeof(int)))) malloc_fail(); currpkg = bsearch_pkg(pkgname, installed, i, 0); free(i); + struct package *currpkg_db; + if (!(i = malloc(sizeof(int)))) malloc_fail(); + currpkg_db = bsearch_pkg(pkgname, database, i, 0); + free(i); + // unregister package remove_db_entry(currpkg, installed); kawafile_dir_remove(currpkg); // remove the package using the function provided by the package type class + // use database version because of the way metapkg handle dependency removal if (!strcmp(currpkg->type, "source")) - return sourcepkg_remove(currpkg); + return sourcepkg_remove(currpkg_db); else if (!strcmp(currpkg->type, "patch")) return 0; // TODO: sourcepkg_install(patch=pkgname) else if (!strcmp(currpkg->type, "meta")) - return metapkg_remove(currpkg); + return metapkg_remove(currpkg_db); else if (!strcmp(currpkg->type, "binary")) return binarypkg_remove(pkgname); return 1; diff --git a/remove.h b/remove.h index 9f9820d..4fdad9b 100644 --- a/remove.h +++ b/remove.h @@ -10,7 +10,7 @@ #include "sourcepkg.h" int pkg_remove(int pkgc, char *pkgnames[]); -int remove_single(char pkgname[], struct pkglist *installed); +int remove_single(char pkgname[], struct pkglist *installed, struct pkglist *database); void remove_db_entry(struct package *package, struct pkglist *installed); #endif // REMOVE_H