summaryrefslogtreecommitdiff
path: root/src/pacman/remove.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pacman/remove.c')
-rw-r--r--src/pacman/remove.c57
1 files changed, 26 insertions, 31 deletions
diff --git a/src/pacman/remove.c b/src/pacman/remove.c
index 4802eff0..b8dd1544 100644
--- a/src/pacman/remove.c
+++ b/src/pacman/remove.c
@@ -25,10 +25,10 @@
#include <libintl.h>
#include <alpm.h>
+#include <alpm_list.h>
/* pacman */
#include "util.h"
#include "log.h"
-#include "list.h"
#include "trans.h"
#include "remove.h"
#include "conf.h"
@@ -37,11 +37,9 @@ extern config_t *config;
extern pmdb_t *db_local;
-int pacman_remove(list_t *targets)
+int pacman_remove(alpm_list_t *targets)
{
- pmlist_t *data;
- list_t *i;
- list_t *finaltargs = NULL;
+ alpm_list_t *data, *i, *j, *finaltargs = NULL;
int retval = 0;
if(targets == NULL) {
@@ -51,27 +49,25 @@ int pacman_remove(list_t *targets)
/* If the target is a group, ask if its packages should be removed
* (the library can't remove groups for now)
*/
- for(i = targets; i; i = i->next) {
- pmgrp_t *grp;
-
- grp = alpm_db_readgrp(db_local, i->data);
+ for(i = targets; i; i = alpm_list_next(i)) {
+ pmgrp_t *grp = alpm_db_readgrp(db_local, alpm_list_getdata(i));
if(grp) {
- pmlist_t *lp, *pkgnames;
int all;
-
- pkgnames = alpm_grp_get_packages(grp);
+ alpm_list_t *pkgnames = alpm_grp_get_packages(grp);
MSG(NL, _(":: group %s:\n"), alpm_grp_get_name(grp));
- pmlist_display(" ", pkgnames);
+ list_display(" ", pkgnames);
all = yesno(_(" Remove whole content? [Y/n] "));
- for(lp = alpm_list_first(pkgnames); lp; lp = alpm_list_next(lp)) {
- if(all || yesno(_(":: Remove %s from group %s? [Y/n] "), (char *)alpm_list_getdata(lp), i->data)) {
- finaltargs = list_add(finaltargs, strdup(alpm_list_getdata(lp)));
+
+ for(j = pkgnames; j; j = alpm_list_next(j)) {
+ char *pkg = alpm_list_getdata(j);
+ if(all || yesno(_(":: Remove %s from group %s? [Y/n] "), pkg, (char *)alpm_list_getdata(i))) {
+ finaltargs = alpm_list_add(finaltargs, strdup(pkg));
}
}
} else {
/* not a group, so add it to the final targets */
- finaltargs = list_add(finaltargs, strdup(i->data));
+ finaltargs = alpm_list_add(finaltargs, strdup(alpm_list_getdata(i)));
}
}
@@ -87,9 +83,10 @@ int pacman_remove(list_t *targets)
return(1);
}
/* and add targets to it */
- for(i = finaltargs; i; i = i->next) {
- if(alpm_trans_addtarget(i->data) == -1) {
- ERR(NL, _("failed to add target '%s' (%s)\n"), (char *)i->data, alpm_strerror(pm_errno));
+ for(i = finaltargs; i; i = alpm_list_next(i)) {
+ char *targ = alpm_list_getdata(i);
+ if(alpm_trans_addtarget(targ) == -1) {
+ ERR(NL, _("failed to add target '%s' (%s)\n"), targ, alpm_strerror(pm_errno));
retval = 1;
goto cleanup;
}
@@ -98,16 +95,15 @@ int pacman_remove(list_t *targets)
/* Step 2: prepare the transaction based on its type, targets and flags
*/
if(alpm_trans_prepare(&data) == -1) {
- pmlist_t *lp;
ERR(NL, _("failed to prepare transaction (%s)\n"), alpm_strerror(pm_errno));
switch(pm_errno) {
case PM_ERR_UNSATISFIED_DEPS:
- for(lp = alpm_list_first(data); lp; lp = alpm_list_next(lp)) {
- pmdepmissing_t *miss = alpm_list_getdata(lp);
+ for(i = data; i; i = alpm_list_next(i)) {
+ pmdepmissing_t *miss = alpm_list_getdata(i);
MSG(NL, _(":: %s is required by %s\n"), alpm_dep_get_target(miss),
alpm_dep_get_name(miss));
}
- alpm_list_free(data);
+ alpm_list_free(data, NULL);
break;
default:
break;
@@ -119,15 +115,14 @@ int pacman_remove(list_t *targets)
/* Warn user in case of dangerous operation
*/
if(config->flags & PM_TRANS_FLAG_RECURSE || config->flags & PM_TRANS_FLAG_CASCADE) {
- pmlist_t *lp;
/* list transaction targets */
- i = NULL;
- for(lp = alpm_list_first(alpm_trans_get_packages()); lp; lp = alpm_list_next(lp)) {
- pmpkg_t *pkg = alpm_list_getdata(lp);
- i = list_add(i, strdup(alpm_pkg_get_name(pkg)));
+ alpm_list_t *lst = NULL;
+ for(i = alpm_trans_get_packages(); i; i = alpm_list_next(i)) {
+ pmpkg_t *pkg = alpm_list_getdata(i);
+ lst = alpm_list_add(lst, strdup(alpm_pkg_get_name(pkg)));
}
- list_display(_("\nTargets:"), i);
- FREELIST(i);
+ list_display(_("\nTargets:"), lst);
+ FREELIST(lst);
/* get confirmation */
if(yesno(_("\nDo you want to remove these packages? [Y/n] ")) == 0) {
retval = 1;