summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2022-08-15 13:14:03 +0200
committerMarian Csontos <mcsontos@redhat.com>2022-12-08 12:34:22 +0100
commitb56e8fc94d4d2b6d384148e3f74c54f4e1d816e6 (patch)
tree2cd12cd5f23b65654e8e6860b626b8429e60faa1
parent7db3a53d8a3aa7401337fb9aaf00f19cf4407e70 (diff)
downloadlvm2-b56e8fc94d4d2b6d384148e3f74c54f4e1d816e6.tar.gz
vdo: fix --vdosettings parser
Parser was incorrectly parsing vdo_use_features - move the skip of 'use_' prefix into internal loop which handles skipping of '_'. (cherry picked from commit bba96e8680ef7fa567d6361c269c0bfc05ce3d2c)
-rw-r--r--tools/toollib.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/tools/toollib.c b/tools/toollib.c
index 210b3dca5..d9a1a92ec 100644
--- a/tools/toollib.c
+++ b/tools/toollib.c
@@ -1198,13 +1198,11 @@ out:
*/
static int _compare_vdo_option(const char *b1, const char *b2)
{
+ int use_skipped = 0;
+
if (strncasecmp(b1, "vdo", 3) == 0) // skip vdo prefix
b1 += 3;
- if ((tolower(*b1) != tolower(*b2)) &&
- (strncmp(b2, "use_", 4) == 0))
- b2 += 4; // try again with skipped prefix 'use_'
-
while (*b1 && *b2) {
if (tolower(*b1) == tolower(*b2)) {
++b1;
@@ -1216,8 +1214,14 @@ static int _compare_vdo_option(const char *b1, const char *b2)
++b1; // skip to next char
else if (*b2 == '_')
++b2; // skip to next char
- else
+ else {
+ if (!use_skipped++ && (strncmp(b2, "use_", 4) == 0)) {
+ b2 += 4; // try again with skipped prefix 'use_'
+ continue;
+ }
+
break; // mismatch
+ }
}
return (*b1 || *b2) ? 0 : 1;