--- gnome-desktop-2.26.1/libgnome-desktop/display-name.c 2009-05-06 16:19:08.498375080 -0400 +++ hacked/libgnome-desktop/display-name.c 2009-05-06 16:17:08.483375623 -0400 @@ -182,15 +182,58 @@ { "???", "Unknown" }, }; +static GHashTable *hwdata = NULL; + +#define PNP_IDS "/usr/share/hwdata/pnp.ids" + +static void +read_hwdata (void) +{ + gchar *contents; + gchar **lines; + gchar *line; + gchar *code, *name; + gint i; + + if (hwdata) + return; + + hwdata = g_hash_table_new (g_str_hash, g_str_equal); + + if (g_file_get_contents (PNP_IDS, &contents, NULL, NULL)) { + lines = g_strsplit (contents, "\n", -1); + for (i = 0; lines[i]; i++) { + line = lines[i]; + if (line[3] == '\t') { + code = line; + line[3] = '\0'; + name = line + 4; + g_hash_table_insert (hwdata, code, name); + } + } + g_free (lines); + } + g_free (contents); +} + + static const char * find_vendor (const char *code) { int i; + const char *vendor_name; + + read_hwdata (); + + vendor_name = g_hash_table_lookup (hwdata, code); + + if (vendor_name) + return vendor_name; for (i = 0; i < sizeof (vendors) / sizeof (vendors[0]); ++i) { const Vendor *v = &(vendors[i]); - + if (strcmp (v->vendor_id, code) == 0) return v->vendor_name; }