--- 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;
}