/*
- * $Id: names.c,v 1.4 1999/12/11 22:38:55 mj Exp $
+ * $Id: names.c,v 1.9 2002/03/30 15:39:25 mj Exp $
*
* The PCI Library -- ID to Name Translation
*
- * Copyright (c) 1997--1999 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
+ * Copyright (c) 1997--2002 Martin Mares <mj@ucw.cz>
*
* Can be freely distributed and used under the terms of the GNU GPL.
*/
lino++;
q = p;
while (*p && *p != '\n')
- {
- if (*p == '#')
- {
- *p++ = 0;
- while (*p && *p != '\n')
- p++;
- break;
- }
- p++;
- }
+ p++;
if (*p == '\n')
*p++ = 0;
- if (!*q)
+ if (!*q || *q == '#')
continue;
r = p;
while (r > q && r[-1] == ' ')
if (n = nl_lookup(a, num, NL_VENDOR, arg3, 0, 0, 0))
return n->name;
else
- res = snprintf(buf, size, "%04x", arg1);
+ 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", arg2);
+ res = snprintf(buf, size, "%04x", arg4);
break;
case PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE | PCI_LOOKUP_SUBSYSTEM:
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)