Blob Blame History Raw
--- 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;
     }