Currently argc and argv are not updated unless parsing of all of the
mapping was successful. However in that case, "ip link" will point at the
wrong argument when complaining:
# ip link add name eth0.100 link eth0 type vlan id 100 egress 1:1 2:foo
Error: argument "1" is wrong: invalid egress-qos-map
Update argc and argv even in the case of parsing error, so that the right
element is indicated.
Signed-off-by: Petr Machata <[email protected]>
---
lib/utils.c | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/lib/utils.c b/lib/utils.c
index 1dfaaf564915..67d64df7e3e6 100644
--- a/lib/utils.c
+++ b/lib/utils.c
@@ -1770,6 +1770,7 @@ int parse_mapping(int *argcp, char ***argvp,
{
int argc = *argcp;
char **argv = *argvp;
+ int ret = 0;
while (argc > 0) {
char *colon = strchr(*argv, ':');
@@ -1779,15 +1780,19 @@ int parse_mapping(int *argcp, char ***argvp,
break;
*colon = '\0';
- if (get_u32(&key, *argv, 0))
- return 1;
- if (mapping_cb(key, colon + 1, mapping_cb_data))
- return 1;
+ if (get_u32(&key, *argv, 0)) {
+ ret = 1;
+ break;
+ }
+ if (mapping_cb(key, colon + 1, mapping_cb_data)) {
+ ret = 1;
+ break;
+ }
argc--, argv++;
}
*argcp = argc;
*argvp = argv;
- return 0;
+ return ret;
}
--
2.25.1