char output[DEVARGS_MAXLEN + 1];
size_t len;
int old_err;
- int ret;
+ int ret, pclose_ret;
RTE_ASSERT(cmdline != NULL || sdev->cmdline != NULL);
if (sdev->cmdline == NULL) {
/* 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);
goto ret_pclose;
}
ret_pclose:
- ret = pclose(fp);
- if (ret) {
- ret = errno;
+ pclose_ret = pclose(fp);
+ if (pclose_ret) {
+ pclose_ret = errno;
ERROR("pclose: %s", strerror(errno));
errno = old_err;
- return ret;
+ return pclose_ret;
}
return ret;
}
dev, params);
}
+static int
+fs_parse_sub_device(struct sub_device *sdev)
+{
+ struct rte_devargs *da;
+ char devstr[DEVARGS_MAXLEN] = "";
+
+ da = &sdev->devargs;
+ snprintf(devstr, sizeof(devstr), "%s,%s", da->name, da->args);
+ return fs_parse_device(sdev, devstr);
+}
+
int
failsafe_args_parse_subs(struct rte_eth_dev *dev)
{
continue;
if (sdev->cmdline)
ret = fs_execute_cmd(sdev, sdev->cmdline);
+ else
+ ret = fs_parse_sub_device(sdev);
if (ret == 0)
sdev->state = DEV_PARSED;
}