- if (!num)
- {
- struct nl_entry *e, *e2;
- e = nl_lookup(a, 0, NL_VENDOR, arg1, 0, 0, 0);
- e2 = nl_lookup(a, 0, NL_DEVICE, arg1, arg2, 0, 0);
- if (!e)
- res = snprintf(buf, size, "Unknown device %04x:%04x", arg1, arg2);
- else if (!e2)
- res = snprintf(buf, size, "%s: Unknown device %04x", e->name, arg2);
- else
- res = snprintf(buf, size, "%s %s", e->name, e2->name);
- }
- else
- res = snprintf(buf, size, "%04x:%04x", arg1, arg2);
- break;
- case PCI_LOOKUP_VENDOR | PCI_LOOKUP_SUBSYSTEM:
- if (n = nl_lookup(a, num, NL_VENDOR, arg3, 0, 0, 0))
- return n->name;
- else
- res = snprintf(buf, size, "%04x", arg2);
- break;
- case PCI_LOOKUP_DEVICE | PCI_LOOKUP_SUBSYSTEM:
- if (n = nl_lookup(a, num, NL_SUBSYSTEM, arg1, arg2, arg3, arg4))
- return n->name;
- else if (arg1 == arg3 && arg2 == arg4 && (n = nl_lookup(a, num, NL_DEVICE, arg1, arg2, 0, 0)))
- return n->name;
- else
- res = snprintf(buf, size, "%04x", arg4);
- break;
+ iv = va_arg(args, int);
+ id = va_arg(args, int);
+ sprintf(numbuf, "%04x:%04x", iv, id);
+ v = id_lookup(a, flags, ID_VENDOR, iv, 0, 0, 0);
+ d = id_lookup(a, flags, ID_DEVICE, iv, id, 0, 0);
+ return format_name_pair(buf, size, flags, v, d, numbuf);
+ case PCI_LOOKUP_SUBSYSTEM | PCI_LOOKUP_VENDOR:
+ isv = va_arg(args, int);
+ sprintf(numbuf, "%04x", isv);
+ v = id_lookup(a, flags, ID_VENDOR, isv, 0, 0, 0);
+ return format_name(buf, size, flags, v, numbuf, "Unknown vendor");
+ case PCI_LOOKUP_SUBSYSTEM | PCI_LOOKUP_DEVICE:
+ iv = va_arg(args, int);
+ id = va_arg(args, int);
+ isv = va_arg(args, int);
+ isd = va_arg(args, int);
+ sprintf(numbuf, "%04x", isd);
+ return format_name(buf, size, flags, id_lookup_subsys(a, flags, iv, id, isv, isd), numbuf, "Unknown device");