diff options
-rw-r--r-- | src/app_dot.c | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/src/app_dot.c b/src/app_dot.c index ab20700..5cd72f1 100644 --- a/src/app_dot.c +++ b/src/app_dot.c @@ -132,9 +132,15 @@ static int dump_pkg(struct dot_ctx *ctx, struct apk_package *pkg) return ret; } -static int foreach_pkg(apk_hash_item item, void *ctx) +static int dump(struct apk_database *db, const char *match, struct apk_name *name, void *pctx) { - dump_pkg((struct dot_ctx *) ctx, (struct apk_package *) item); + struct dot_ctx *ctx = pctx; + struct apk_provider *p; + + if (!name) return 0; + + foreach_array_item(p, name->providers) + dump_pkg(ctx, p->pkg); return 0; } @@ -142,20 +148,8 @@ static int dot_main(void *pctx, struct apk_ctx *ac, struct apk_string_array *arg { struct apk_database *db = ac->db; struct dot_ctx *ctx = (struct dot_ctx *) pctx; - struct apk_provider *p; - char **parg; - if (args->num) { - foreach_array_item(parg, args) { - struct apk_name *name = apk_db_get_name(db, APK_BLOB_STR(*parg)); - if (!name) - continue; - foreach_array_item(p, name->providers) - dump_pkg(ctx, p->pkg); - } - } else { - apk_hash_foreach(&db->available.packages, foreach_pkg, pctx); - } + apk_db_foreach_matching_name(db, args, dump, pctx); if (!ctx->not_empty) return 1; |