@@ -1781,6 +1781,7 @@ int parse_mapping(int *argcp, char ***argvp,
{
int argc = *argcp;
char **argv = *argvp;
+ int ret = 0;
while (argc > 0) {
char *colon = strchr(*argv, ':');
@@ -1790,15 +1791,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;
}
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 <me@pmachata.org> --- lib/utils.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)