libopkg: consider provided packages in pkg_vec_mark_if_matches()
[oweals/opkg-lede.git] / libopkg / pkg_vec.c
index ce098bc367456e38e437a8e4d55b1d63601cd778..a9e2e73f8b96700ea35988a986d470258904ef49 100644 (file)
@@ -140,12 +140,24 @@ int pkg_vec_mark_if_matches(pkg_vec_t * vec, const char *pattern)
        pkg_t **pkgs = vec->pkgs;
        int npkgs = vec->len;
        int i;
+       abstract_pkg_t **providers, *provider;
+
        for (i = 0; i < npkgs; i++) {
                pkg_t *pkg = pkgs[i];
                if (fnmatch(pattern, pkg->name, 0) == 0) {
                        pkg->state_flag |= SF_MARKED;
                        matching_count++;
                }
+               else {
+                       providers = pkg_get_ptr(pkg, PKG_PROVIDES);
+                       while (providers && *providers) {
+                               provider = *providers++;
+                               if (fnmatch(pattern, provider->name, 0) == 0) {
+                                       pkg->state_flag |= SF_MARKED;
+                                       matching_count++;
+                               }
+                       }
+               }
        }
        return matching_count;
 }