X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Ffailsafe%2Ffailsafe_args.c;h=cfc83e365d13e6f5a88b99ffb3c6bc03bbcdfc86;hb=9df0826a42e890006c77861c74b79907f33b8201;hp=932e371f94d96e96f4a9ffc1147ef8da0c3ef467;hpb=598fb8aec6f6c8618a2425789e12fc352f120858;p=dpdk.git diff --git a/drivers/net/failsafe/failsafe_args.c b/drivers/net/failsafe/failsafe_args.c index 932e371f94..cfc83e365d 100644 --- a/drivers/net/failsafe/failsafe_args.c +++ b/drivers/net/failsafe/failsafe_args.c @@ -101,10 +101,11 @@ fs_parse_device(struct sub_device *sdev, char *args) static void fs_sanitize_cmdline(char *args) { - size_t len; + char *nl; - len = strnlen(args, DEVARGS_MAXLEN); - args[len - 1] = '\0'; + nl = strrchr(args, '\n'); + if (nl) + nl[0] = '\0'; } static int @@ -114,7 +115,6 @@ fs_execute_cmd(struct sub_device *sdev, char *cmdline) /* store possible newline as well */ char output[DEVARGS_MAXLEN + 1]; size_t len; - int old_err; int ret; RTE_ASSERT(cmdline != NULL || sdev->cmdline != NULL); @@ -134,33 +134,29 @@ fs_execute_cmd(struct sub_device *sdev, char *cmdline) sdev->cmdline[i] = ' '; } DEBUG("'%s'", sdev->cmdline); - old_err = errno; fp = popen(sdev->cmdline, "r"); if (fp == NULL) { - ret = errno; + ret = -errno; ERROR("popen: %s", strerror(errno)); - errno = old_err; return ret; } /* We only read one line */ if (fgets(output, sizeof(output) - 1, fp) == NULL) { DEBUG("Could not read command output"); - return -ENODEV; + ret = -ENODEV; + goto ret_pclose; } fs_sanitize_cmdline(output); - ret = fs_parse_device(sdev, output); - if (ret) { - ERROR("Parsing device '%s' failed", output); + if (output[0] == '\0') { + ret = -ENODEV; goto ret_pclose; } + ret = fs_parse_device(sdev, output); + if (ret) + ERROR("Parsing device '%s' failed", output); ret_pclose: - ret = pclose(fp); - if (ret) { - ret = errno; + if (pclose(fp) == -1) ERROR("pclose: %s", strerror(errno)); - errno = old_err; - return ret; - } return ret; } @@ -280,10 +276,17 @@ fs_remove_sub_devices_definition(char params[DEVARGS_MAXLEN]) ERROR("Invalid parameter"); return -EINVAL; } - if (params[b] == ',' || params[b] == '\0') - i += snprintf(&buffer[i], b - a + 1, "%s", ¶ms[a]); - if (params[b] == '(') { + if (params[b] == ',' || params[b] == '\0') { + size_t len = b - a; + + if (i > 0) + len += 1; + snprintf(&buffer[i], len + 1, "%s%s", + i ? "," : "", ¶ms[a]); + i += len; + } else if (params[b] == '(') { size_t start = b; + b += closing_paren(¶ms[b]); if (b == start) return -EINVAL; @@ -387,6 +390,7 @@ failsafe_args_parse(struct rte_eth_dev *dev, const char *params) &dev->data->mac_addrs[0]); if (ret < 0) goto free_kvlist; + mac_from_arg = 1; } }