X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=libopkg%2Fopkg_remove.c;h=1eda4f6a17fae395968710e25f9b07e204f629b8;hb=acd905996191df6ab59050bd179a5ed11e6f72a4;hp=afb8aa79e9b2d040931933fc18d965957d2d7975;hpb=f4a787e50beb527aeffd847df6b734b29967bd96;p=oweals%2Fopkg-lede.git diff --git a/libopkg/opkg_remove.c b/libopkg/opkg_remove.c index afb8aa7..1eda4f6 100644 --- a/libopkg/opkg_remove.c +++ b/libopkg/opkg_remove.c @@ -1,4 +1,4 @@ -/* opkg_remove.c - the itsy package management system +/* opkg_remove.c - the opkg package management system Carl D. Worth @@ -15,12 +15,14 @@ General Public License for more details. */ -#include "opkg.h" +#include "includes.h" #include "opkg_message.h" #include #include "opkg_remove.h" +#include "opkg_error.h" +#include "opkg_cmd.h" #include "file_util.h" #include "sprintf_alloc.h" @@ -52,7 +54,7 @@ int pkg_has_installed_dependents(opkg_conf_t *conf, abstract_pkg_t *parent_apkg, /* if caller requested the set of installed dependents */ if (pdependents) { int p = 0; - abstract_pkg_t **dependents = (abstract_pkg_t **)malloc((n_installed_dependents+1)*sizeof(abstract_pkg_t *)); + abstract_pkg_t **dependents = (abstract_pkg_t **)calloc((n_installed_dependents+1), sizeof(abstract_pkg_t *)); if ( dependents == NULL ){ fprintf(stderr,"%s Unable to allocate memory. REPORT THIS BUG IN BUGZILLA PLEASE\n", __FUNCTION__); @@ -88,7 +90,7 @@ int opkg_remove_dependent_pkgs (opkg_conf_t *conf, pkg_t *pkg, abstract_pkg_t ** int i; int a; int count; - pkg_vec_t *dependent_pkgs = pkg_vec_alloc(); + pkg_vec_t *dependent_pkgs; abstract_pkg_t * ab_pkg; if((ab_pkg = pkg->parent) == NULL){ @@ -108,6 +110,8 @@ int opkg_remove_dependent_pkgs (opkg_conf_t *conf, pkg_t *pkg, abstract_pkg_t ** i = 0; count = 1; + dependent_pkgs = pkg_vec_alloc(); + while (dependents [i] != NULL) { abstract_pkg_t *dep_ab_pkg = dependents[i]; @@ -129,16 +133,20 @@ int opkg_remove_dependent_pkgs (opkg_conf_t *conf, pkg_t *pkg, abstract_pkg_t ** * 2 - to keep track of pkgs whose deps have been checked alrdy - Karthik */ } - if (count == 1) - return 0; + if (count == 1) { + free(dependent_pkgs); + return 0; + } + int err=0; for (i = 0; i < dependent_pkgs->len; i++) { - int err = opkg_remove_pkg(conf, dependent_pkgs->pkgs[i],0); + err = opkg_remove_pkg(conf, dependent_pkgs->pkgs[i],0); if (err) - return err; + break; } - return 0; + free(dependent_pkgs); + return err; } static int user_prefers_removing_dependents(opkg_conf_t *conf, abstract_pkg_t *abpkg, pkg_t *pkg, abstract_pkg_t **dependents) @@ -173,7 +181,7 @@ static int remove_autoinstalled (opkg_conf_t *conf, pkg_t *pkg) int x = 0; pkg_t *p; d_str = pkg->depends_str[i]; - buffer = malloc (strlen (d_str) + 1); + buffer = calloc (1, strlen (d_str) + 1); if (!buffer) { fprintf(stderr,"%s Unable to allocate memory.\n", __FUNCTION__); @@ -261,14 +269,19 @@ int opkg_remove_pkg(opkg_conf_t *conf, pkg_t *pkg,int message) if (!conf->force_removal_of_dependent_packages && !user_prefers_removing_dependents(conf, parent_pkg, pkg, dependents)) { + free(dependents); return OPKG_PKG_HAS_DEPENDENTS; } /* remove packages depending on this package - Karthik */ err = opkg_remove_dependent_pkgs (conf, pkg, dependents); - free(dependents); - if (err) return err; + if (err) { + free(dependents); + return err; + } } + if (dependents) + free(dependents); } if ( message==0 ){ @@ -334,11 +347,11 @@ int remove_data_files_and_list(opkg_conf_t *conf, pkg_t *pkg) str_list_init(&installed_dirs); installed_files = pkg_get_installed_files(pkg); - for (iter = installed_files->head; iter; iter = iter->next) { - file_name = iter->data; + for (iter = str_list_first(installed_files); iter; iter = str_list_next(installed_files, iter)) { + file_name = (char *)iter->data; if (file_is_dir(file_name)) { - str_list_append(&installed_dirs, strdup(file_name)); + str_list_append(&installed_dirs, file_name); continue; } @@ -365,8 +378,8 @@ int remove_data_files_and_list(opkg_conf_t *conf, pkg_t *pkg) if (!conf->noaction) { do { removed_a_dir = 0; - for (iter = installed_dirs.head; iter; iter = iter->next) { - file_name = iter->data; + for (iter = str_list_first(&installed_dirs); iter; iter = str_list_next(&installed_dirs, iter)) { + file_name = (char *)iter->data; if (rmdir(file_name) == 0) { opkg_message(conf, OPKG_INFO, " deleting %s\n", file_name); @@ -383,8 +396,8 @@ int remove_data_files_and_list(opkg_conf_t *conf, pkg_t *pkg) pkg_remove_installed_files_list(conf, pkg); /* Don't print warning for dirs that are provided by other packages */ - for (iter = installed_dirs.head; iter; iter = iter->next) { - file_name = iter->data; + for (iter = str_list_first(&installed_dirs); iter; iter = str_list_next(&installed_dirs, iter)) { + file_name = (char *)iter->data; owner = file_hash_get_file_owner(conf, file_name); if (owner) { @@ -395,9 +408,10 @@ int remove_data_files_and_list(opkg_conf_t *conf, pkg_t *pkg) } /* cleanup */ - for (iter = installed_dirs.head; iter; iter = iter->next) { - free(iter->data); - iter->data = NULL; + while (!void_list_empty(&installed_dirs)) { + iter = str_list_pop(&installed_dirs); + free(iter->data); + free(iter); } str_list_deinit(&installed_dirs);