summaryrefslogtreecommitdiff
path: root/src/app_del.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/app_del.c')
-rw-r--r--src/app_del.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/app_del.c b/src/app_del.c
index 1df4cc9..2a09ca6 100644
--- a/src/app_del.c
+++ b/src/app_del.c
@@ -87,13 +87,15 @@ static void print_not_deleted_pkg(struct apk_package *pkg0, struct apk_dependenc
}
}
-static void print_not_deleted_name(struct apk_database *db, const char *match,
- struct apk_name *name, void *pctx)
+static int print_not_deleted_name(struct apk_database *db, const char *match,
+ struct apk_name *name, void *pctx)
{
struct apk_out *out = &db->ctx->out;
struct not_deleted_ctx *ctx = (struct not_deleted_ctx *) pctx;
struct apk_provider *p;
+ if (!name) return 0;
+
ctx->name = name;
ctx->matches = apk_foreach_genid() | APK_FOREACH_MARKED | APK_DEP_SATISFIES;
apk_print_indented_init(&ctx->indent, out, 0);
@@ -101,6 +103,7 @@ static void print_not_deleted_name(struct apk_database *db, const char *match,
if (p->pkg->marked)
print_not_deleted_pkg(p->pkg, NULL, NULL, ctx);
apk_print_indented_end(&ctx->indent);
+ return 0;
}
static void delete_pkg(struct apk_package *pkg0, struct apk_dependency *dep0,
@@ -115,7 +118,7 @@ static void delete_pkg(struct apk_package *pkg0, struct apk_dependency *dep0,
delete_pkg, pctx);
}
-static void delete_name(struct apk_database *db, const char *match,
+static int delete_name(struct apk_database *db, const char *match,
struct apk_name *name, void *pctx)
{
struct apk_out *out = &db->ctx->out;
@@ -125,7 +128,7 @@ static void delete_name(struct apk_database *db, const char *match,
if (!name) {
apk_err(out, "No such package: %s", match);
ctx->errors++;
- return;
+ return 0;
}
pkg = apk_pkg_get_installed(name);
@@ -133,6 +136,7 @@ static void delete_name(struct apk_database *db, const char *match,
delete_pkg(pkg, NULL, NULL, pctx);
else
apk_deps_del(&ctx->world, name);
+ return 0;
}
static int del_main(void *pctx, struct apk_ctx *ac, struct apk_string_array *args)
@@ -146,7 +150,7 @@ static int del_main(void *pctx, struct apk_ctx *ac, struct apk_string_array *arg
int r = 0;
apk_dependency_array_copy(&ctx->world, db->world);
- apk_name_foreach_matching(db, args, apk_foreach_genid(), delete_name, ctx);
+ if (args->num) apk_db_foreach_matching_name(db, args, delete_name, ctx);
if (ctx->errors) return ctx->errors;
r = apk_solver_solve(db, 0, ctx->world, &changeset);
@@ -157,10 +161,8 @@ static int del_main(void *pctx, struct apk_ctx *ac, struct apk_string_array *arg
change->new_pkg->marked = 1;
foreach_array_item(d, ctx->world)
d->name->state_int = 1;
- apk_name_foreach_matching(
- db, args,
- apk_foreach_genid() | APK_FOREACH_MARKED | APK_DEP_SATISFIES,
- print_not_deleted_name, &ndctx);
+ if (args->num)
+ apk_db_foreach_sorted_name(db, args, print_not_deleted_name, &ndctx);
if (ndctx.header)
printf("\n");