- res = compound_name(a, num, buf, size, NL_SUBSYSTEM_VENDOR, arg1, arg2);
+ if (!num)
+ {
+ struct nl_entry *e, *e2;
+ e = nl_lookup(a, 0, NL_VENDOR, arg3, 0, 0, 0);
+ e2 = nl_lookup(a, 0, NL_SUBSYSTEM, arg1, arg2, arg3, arg4);
+ if (!e2 && arg1 == arg3 && arg2 == arg4)
+ /* Cheat for vendors blindly setting subsystem ID same as device ID */
+ e2 = nl_lookup(a, 0, NL_DEVICE, arg1, arg2, 0, 0);
+ if (!e)
+ res = snprintf(buf, size, "Unknown device %04x:%04x", arg3, arg4);
+ else if (!e2)
+ res = snprintf(buf, size, "%s: Unknown device %04x", e->name, arg4);
+ else
+ res = snprintf(buf, size, "%s %s", e->name, e2->name);
+ }
+ else
+ res = snprintf(buf, size, "%04x:%04x", arg3, arg4);