summaryrefslogtreecommitdiffstats
path: root/usr.sbin/pkg_install/version
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/pkg_install/version')
-rw-r--r--usr.sbin/pkg_install/version/perform.c36
1 files changed, 29 insertions, 7 deletions
diff --git a/usr.sbin/pkg_install/version/perform.c b/usr.sbin/pkg_install/version/perform.c
index db2fb19..6c345b9 100644
--- a/usr.sbin/pkg_install/version/perform.c
+++ b/usr.sbin/pkg_install/version/perform.c
@@ -44,9 +44,10 @@ static void show_version(const char *, const char *, const char *);
int
pkg_perform(char **indexarg)
{
- char tmp[PATH_MAX], **pkgs;
+ char tmp[PATH_MAX], **pkgs, *pat[2], **patterns;
struct index_entry *ie;
int i, err_cnt = 0;
+ int MatchType;
/*
* Try to find and open the INDEX. We only check IndexFile != NULL
@@ -62,16 +63,37 @@ pkg_perform(char **indexarg)
else
IndexFile = fopen(tmp, "r");
- /* Get a list of all the installed packages */
- pkgs = matchinstalled(MATCH_ALL, NULL, &err_cnt);
+ /* Get either a list of matching or all packages */
+ if (MatchName != NULL) {
+ pat[0] = MatchName;
+ pat[1] = NULL;
+ MatchType = MATCH_REGEX;
+ patterns = pat;
+ }
+ else {
+ MatchType = MATCH_ALL;
+ patterns = NULL;
+ }
+ pkgs = matchinstalled(MatchType, patterns, &err_cnt);
+
if (err_cnt != 0)
errx(2, "Unable to find package database directory!");
- i = -1;
- while (pkgs[++i] != NULL) {
- if (MatchName == NULL || strstr(pkgs[i], MatchName))
- err_cnt += pkg_do(pkgs[i]);
+ if (pkgs == NULL) {
+ switch (MatchType) {
+ case MATCH_ALL:
+ warnx("no packages installed");
+ return (0);
+ case MATCH_REGEX:
+ warnx("no packages match pattern");
+ return (1);
+ default:
+ break;
+ }
}
+ for (i = 0; pkgs[i] != NULL; i++)
+ err_cnt += pkg_do(pkgs[i]);
+
/* If we opened the INDEX in pkg_do(), clean up. */
while (!SLIST_EMPTY(&Index)) {
ie = SLIST_FIRST(&Index);
OpenPOWER on IntegriCloud