hwentry structures are supposed to be initialized and destroyed
with alloc_hwe() and free_hwe(), respectively. The second
argument is of hwe_regmatch() isn't a real hwentry, just a
vendor/product/revision tuple. Clarify that by adapting the
prototype. This allows to use const arguments in find_hwe(), too.

Signed-off-by: Martin Wilck <[email protected]>
---
 libmultipath/config.c | 30 +++++++++++++++---------------
 libmultipath/config.h |  4 +++-
 2 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/libmultipath/config.c b/libmultipath/config.c
index 44f141ba..d2812e4a 100644
--- a/libmultipath/config.c
+++ b/libmultipath/config.c
@@ -64,7 +64,8 @@ find_hwe_strmatch (const struct _vector *hwtable, const 
struct hwentry *hwe)
 }
 
 static int
-hwe_regmatch (const struct hwentry *hwe1, const struct hwentry *hwe2)
+hwe_regmatch (const struct hwentry *hwe1, const char *vendor,
+             const char *product, const char *revision)
 {
        regex_t vre, pre, rre;
        int retval = 1;
@@ -81,13 +82,13 @@ hwe_regmatch (const struct hwentry *hwe1, const struct 
hwentry *hwe2)
            regcomp(&rre, hwe1->revision, REG_EXTENDED|REG_NOSUB))
                goto out_pre;
 
-       if ((hwe2->vendor || hwe2->product || hwe2->revision) &&
-           (!hwe1->vendor || !hwe2->vendor ||
-            !regexec(&vre, hwe2->vendor, 0, NULL, 0)) &&
-           (!hwe1->product || !hwe2->product ||
-            !regexec(&pre, hwe2->product, 0, NULL, 0)) &&
-           (!hwe1->revision || !hwe2->revision ||
-            !regexec(&rre, hwe2->revision, 0, NULL, 0)))
+       if ((vendor || product || revision) &&
+           (!hwe1->vendor || !vendor ||
+            !regexec(&vre, vendor, 0, NULL, 0)) &&
+           (!hwe1->product || !product ||
+            !regexec(&pre, product, 0, NULL, 0)) &&
+           (!hwe1->revision || !revision ||
+            !regexec(&rre, revision, 0, NULL, 0)))
                retval = 0;
 
        if (hwe1->revision)
@@ -103,14 +104,12 @@ out:
 }
 
 struct hwentry *
-find_hwe (vector hwtable, char * vendor, char * product, char * revision)
+find_hwe (const struct _vector *hwtable,
+         const char * vendor, const char * product, const char * revision)
 {
        int i;
-       struct hwentry hwe, *tmp, *ret = NULL;
+       struct hwentry *tmp, *ret = NULL;
 
-       hwe.vendor = vendor;
-       hwe.product = product;
-       hwe.revision = revision;
        /*
         * Search backwards here.
         * User modified entries are attached at the end of
@@ -118,7 +117,7 @@ find_hwe (vector hwtable, char * vendor, char * product, 
char * revision)
         * continuing to the generic entries
         */
        vector_foreach_slot_backwards (hwtable, tmp, i) {
-               if (hwe_regmatch(tmp, &hwe))
+               if (hwe_regmatch(tmp, vendor, product, revision))
                        continue;
                ret = tmp;
                break;
@@ -454,7 +453,8 @@ restart:
                                free_hwe(hwe2);
                                continue;
                        }
-                       if (hwe_regmatch(hwe1, hwe2))
+                       if (hwe_regmatch(hwe1, hwe2->vendor,
+                                        hwe2->product, hwe2->revision))
                                continue;
                        /* dup */
                        merge_hwe(hwe2, hwe1);
diff --git a/libmultipath/config.h b/libmultipath/config.h
index 6e69a37e..83eaf62f 100644
--- a/libmultipath/config.h
+++ b/libmultipath/config.h
@@ -213,7 +213,9 @@ struct config {
 
 extern struct udev * udev;
 
-struct hwentry * find_hwe (vector hwtable, char * vendor, char * product, char 
*revision);
+struct hwentry * find_hwe (const struct _vector *hwtable,
+                          const char * vendor, const char * product,
+                          const char *revision);
 struct mpentry * find_mpe (vector mptable, char * wwid);
 char * get_mpe_wwid (vector mptable, char * alias);
 
-- 
2.17.0

--
dm-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/dm-devel

Reply via email to