summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/info.c44
1 files changed, 30 insertions, 14 deletions
diff --git a/src/info.c b/src/info.c
index 5dd0e30..b7071a5 100644
--- a/src/info.c
+++ b/src/info.c
@@ -23,19 +23,31 @@ struct info_ctx {
void (*subaction)(struct apk_package *pkg);
};
+static void verbose_print_pkg(struct apk_package *pkg, int minimal_verbosity)
+{
+ int verbosity = apk_verbosity;
+ if (verbosity < minimal_verbosity)
+ verbosity = minimal_verbosity;
+
+ if (pkg == NULL || verbosity < 1)
+ return;
+
+ printf("%s", pkg->name->name);
+ if (apk_verbosity > 1)
+ printf("-%s", pkg->version);
+ if (apk_verbosity > 2)
+ printf(" - %s", pkg->description);
+ printf("\n");
+}
+
+
static int info_list(struct info_ctx *ctx, struct apk_database *db,
int argc, char **argv)
{
struct apk_package *pkg;
- list_for_each_entry(pkg, &db->installed.packages, installed_pkgs_list) {
- printf("%s", pkg->name->name);
- if (apk_verbosity > 0)
- printf("-%s", pkg->version);
- if (apk_verbosity > 1)
- printf("- %s", pkg->description);
- printf("\n");
- }
+ list_for_each_entry(pkg, &db->installed.packages, installed_pkgs_list)
+ verbose_print_pkg(pkg, 1);
return 0;
}
@@ -43,22 +55,26 @@ static int info_exists(struct info_ctx *ctx, struct apk_database *db,
int argc, char **argv)
{
struct apk_name *name;
- int i, j;
+ int i, j, ret = 0;
for (i = 0; i < argc; i++) {
name = apk_db_query_name(db, APK_BLOB_STR(argv[i]));
- if (name == NULL)
- return 1;
+ if (name == NULL) {
+ ret++;
+ continue;
+ }
for (j = 0; j < name->pkgs->num; j++) {
if (apk_pkg_get_state(name->pkgs->item[j]) == APK_PKG_INSTALLED)
break;
}
- if (j >= name->pkgs->num)
- return 2;
+ if (j >= name->pkgs->num) {
+ ret++;
+ } else
+ verbose_print_pkg(name->pkgs->item[j], 0);
}
- return 0;
+ return ret;
}
static int info_who_owns(struct info_ctx *ctx, struct apk_database *db,