]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
util: Delete argconfig value length to calcurate instead
authorTokunori Ikegami <ikegami.t@gmail.com>
Tue, 2 May 2023 15:41:13 +0000 (00:41 +0900)
committerDaniel Wagner <wagi@monom.org>
Thu, 4 May 2023 06:43:21 +0000 (08:43 +0200)
Signed-off-by: Tokunori Ikegami <ikegami.t@gmail.com>
nvme.c
util/argconfig.c
util/argconfig.h

diff --git a/nvme.c b/nvme.c
index 7bb40958855239317bfab9f6c784533daa3e4b5e..ae3749ee4c5a753f857ab3086ac314ad51480411 100644 (file)
--- a/nvme.c
+++ b/nvme.c
@@ -5301,10 +5301,10 @@ static int sanitize_cmd(int argc, char **argv, struct command *cmd, struct plugi
        };
 
        OPT_VALS(sanact) = {
-               VAL_BYTE("exit-failure", 1, NVME_SANITIZE_SANACT_EXIT_FAILURE),
-               VAL_BYTE("start-block-erase", 7, NVME_SANITIZE_SANACT_START_BLOCK_ERASE),
-               VAL_BYTE("start-overwrite", 7, NVME_SANITIZE_SANACT_START_OVERWRITE),
-               VAL_BYTE("start-crypto-erase", 7, NVME_SANITIZE_SANACT_START_CRYPTO_ERASE),
+               VAL_BYTE("exit-failure", NVME_SANITIZE_SANACT_EXIT_FAILURE),
+               VAL_BYTE("start-block-erase", NVME_SANITIZE_SANACT_START_BLOCK_ERASE),
+               VAL_BYTE("start-overwrite", NVME_SANITIZE_SANACT_START_OVERWRITE),
+               VAL_BYTE("start-crypto-erase", NVME_SANITIZE_SANACT_START_CRYPTO_ERASE),
                VAL_END()
        };
 
index 1c35ba4d842ec57cbb7589df6de64e7dc1779872..7b213cc6054e1b18f350750bf753da3c27a14d74 100644 (file)
@@ -241,6 +241,25 @@ static int argconfig_parse_type(struct argconfig_commandline_options *s, struct
        return ret;
 }
 
+static int argconfig_get_val_len(struct argconfig_opt_val *opt_val, const char *str)
+{
+       struct argconfig_opt_val *v;
+       int len;
+       int match;
+
+       for (len = 1; len <= strlen(str); len++) {
+               match = 0;
+               for (v = opt_val; v && v->str; v++) {
+                       if (!strncasecmp(str, v->str, len))
+                               match++;
+               }
+               if (match == 1)
+                       break;
+       }
+
+       return len;
+}
+
 static int argconfig_parse_val(struct argconfig_commandline_options *s, struct option *option,
                               int index)
 {
@@ -248,9 +267,11 @@ static int argconfig_parse_val(struct argconfig_commandline_options *s, struct o
        void *val = s->default_value;
        int len = strlen(optarg);
        struct argconfig_opt_val *v;
+       int val_len;
 
        for (v = s->opt_val; v && v->str; v++) {
-               if (strncasecmp(str, v->str, len > v->len ? len : v->len))
+               val_len = argconfig_get_val_len(s->opt_val, v->str);
+               if (strncasecmp(str, v->str, len > val_len ? len : val_len))
                        continue;
                switch (v->type) {
                case CFG_FLAG:
index fe34f54d4ebfc0d0c1a2b9ce21859e180c312dfe..8ce28b7c0dde9727a39b5bc129cbbefa633a5517 100644 (file)
@@ -106,34 +106,34 @@ enum argconfig_types {
 #define VAL_END() { NULL }
 
 #define VAL_FLAG(s, l, v) \
-       {s, l, CFG_FLAG, .val.flag = v}
+       {s, CFG_FLAG, .val.flag = v}
 
-#define VAL_LONG_SUFFIX(s, l, v) \
-       {s, l, CFG_LONG_SUFFIX, .val.long_suffix = v}
+#define VAL_LONG_SUFFIX(s, v) \
+       {s, CFG_LONG_SUFFIX, .val.long_suffix = v}
 
-#define VAL_UINT(s, l, v) \
-       {s, l, CFG_POSITIVE, v}
+#define VAL_UINT(s, v) \
+       {s, CFG_POSITIVE, v}
 
-#define VAL_INT(s, l, v) \
-       {s, l, CFG_INT, .val.int_val = v}
+#define VAL_INT(s, v) \
+       {s, CFG_INT, .val.int_val = v}
 
-#define VAL_LONG(s, l, v) \
-       {s, l, CFG_LONG, .val.long_val = v}
+#define VAL_LONG(s, v) \
+       {s, CFG_LONG, .val.long_val = v}
 
-#define VAL_DOUBLE(s, l, v) \
-       {s, l, CFG_DOUBLE, .val.double_val = v}
+#define VAL_DOUBLE(s, v) \
+       {s, CFG_DOUBLE, .val.double_val = v}
 
-#define VAL_BYTE(s, l, v) \
-       {s, l, CFG_BYTE, .val.byte = v}
+#define VAL_BYTE(s, v) \
+       {s, CFG_BYTE, .val.byte = v}
 
-#define VAL_SHRT(s, l, v) \
-       {s, l, CFG_SHORT, .val.short_val = v}
+#define VAL_SHRT(s, v) \
+       {s, CFG_SHORT, .val.short_val = v}
 
-#define VAL_INCR(s, l, v) \
-       {s, l, CFG_INCREMENT, .val.increment = v}
+#define VAL_INCR(s, v) \
+       {s, CFG_INCREMENT, .val.increment = v}
 
-#define VAL_STRING(s, l, m, v) \
-       {s, l, CFG_STRING, .val.string = v}
+#define VAL_STRING(s, m, v) \
+       {s, CFG_STRING, .val.string = v}
 
 union argconfig_val {
        char *string;
@@ -152,7 +152,6 @@ union argconfig_val {
 
 struct argconfig_opt_val {
        const char *str;
-       const int len;
        enum argconfig_types type;
        union argconfig_val val;
 };