{
FILE *file;
char line[32];
+ int rc = -ENOENT;
MKSTR(path, "%s/device/uevent", dev_path);
file = fopen(path, "rb");
}
while (fgets(line, sizeof(line), file) == line) {
size_t len = strlen(line);
- int ret;
/* Truncate long lines. */
- if (len == (sizeof(line) - 1))
+ if (len == (sizeof(line) - 1)) {
while (line[(len - 1)] != '\n') {
- ret = fgetc(file);
+ int ret = fgetc(file);
+
if (ret == EOF)
- break;
+ goto exit;
line[(len - 1)] = ret;
}
+ /* No match for long lines. */
+ continue;
+ }
/* Extract information. */
if (sscanf(line,
"PCI_SLOT_NAME="
&pci_addr->bus,
&pci_addr->devid,
&pci_addr->function) == 4) {
- ret = 0;
+ rc = 0;
break;
}
}
+exit:
fclose(file);
- return 0;
+ if (rc)
+ rte_errno = -rc;
+ return rc;
}
/**
mlx5_translate_port_name(const char *port_name_in,
struct mlx5_switch_info *port_info_out)
{
- char pf_c1, pf_c2, vf_c1, vf_c2;
+ char pf_c1, pf_c2, vf_c1, vf_c2, eol;
char *end;
int sc_items;
* Check for port-name as a string of the form pf0vf0
* (support kernel ver >= 5.0 or OFED ver >= 4.6).
*/
- sc_items = sscanf(port_name_in, "%c%c%d%c%c%d",
+ sc_items = sscanf(port_name_in, "%c%c%d%c%c%d%c",
&pf_c1, &pf_c2, &port_info_out->pf_num,
- &vf_c1, &vf_c2, &port_info_out->port_name);
+ &vf_c1, &vf_c2, &port_info_out->port_name, &eol);
if (sc_items == 6 &&
pf_c1 == 'p' && pf_c2 == 'f' &&
vf_c1 == 'v' && vf_c2 == 'f') {
* Check for port-name as a string of the form p0
* (support kernel ver >= 5.0, or OFED ver >= 4.6).
*/
- sc_items = sscanf(port_name_in, "%c%d",
- &pf_c1, &port_info_out->port_name);
+ sc_items = sscanf(port_name_in, "%c%d%c",
+ &pf_c1, &port_info_out->port_name, &eol);
if (sc_items == 2 && pf_c1 == 'p') {
port_info_out->name_type = MLX5_PHYS_PORT_NAME_TYPE_UPLINK;
return;
* Check for port-name as a string of the form pf0
* (support kernel ver >= 5.7 for HPF representor on BF).
*/
- sc_items = sscanf(port_name_in, "%c%c%d",
- &pf_c1, &pf_c2, &port_info_out->pf_num);
+ sc_items = sscanf(port_name_in, "%c%c%d%c",
+ &pf_c1, &pf_c2, &port_info_out->pf_num, &eol);
if (sc_items == 3 && pf_c1 == 'p' && pf_c2 == 'f') {
port_info_out->port_name = -1;
port_info_out->name_type = MLX5_PHYS_PORT_NAME_TYPE_PFHPF;