825b56f
diff -up gnome-desktop-2.27.4/libgnome-desktop/edid.h.concatenate-edid-descriptors gnome-desktop-2.27.4/libgnome-desktop/edid.h
825b56f
--- gnome-desktop-2.27.4/libgnome-desktop/edid.h.concatenate-edid-descriptors	2009-04-19 13:39:06.000000000 -0400
825b56f
+++ gnome-desktop-2.27.4/libgnome-desktop/edid.h	2009-07-15 12:49:00.883963393 -0400
825b56f
@@ -183,12 +183,13 @@ struct MonitorInfo
825b56f
 						 */
825b56f
 
825b56f
     /* Optional product description */
825b56f
-    char		dsc_serial_number[14];
825b56f
-    char		dsc_product_name[14];
825b56f
-    char		dsc_string[14];		/* Unspecified ASCII data */
825b56f
+    char	       *dsc_serial_number;
825b56f
+    char	       *dsc_product_name;
825b56f
+    char	       *dsc_string;		/* Unspecified ASCII data */
825b56f
 };
825b56f
 
825b56f
 MonitorInfo *decode_edid (const uchar *data);
825b56f
+void         free_edid (MonitorInfo *);
825b56f
 char *       make_display_name (const char        *output_name,
825b56f
 				const MonitorInfo *info);
825b56f
 
825b56f
diff -up gnome-desktop-2.27.4/libgnome-desktop/edid-parse.c.concatenate-edid-descriptors gnome-desktop-2.27.4/libgnome-desktop/edid-parse.c
825b56f
--- gnome-desktop-2.27.4/libgnome-desktop/edid-parse.c.concatenate-edid-descriptors	2009-04-19 13:39:06.000000000 -0400
825b56f
+++ gnome-desktop-2.27.4/libgnome-desktop/edid-parse.c	2009-07-15 12:53:51.648990812 -0400
825b56f
@@ -349,27 +349,44 @@ decode_standard_timings (const uchar *ed
825b56f
     return TRUE;
825b56f
 }
825b56f
 
825b56f
-static void
825b56f
-decode_lf_string (const uchar *s, int n_chars, char *result)
825b56f
+static char *
825b56f
+decode_lf_string (const uchar *s, int n_chars, char *prev)
825b56f
 {
825b56f
     int i;
825b56f
+    char *ret, *tmp;
825b56f
+
825b56f
+    tmp = g_malloc0 (n_chars);
825b56f
+
825b56f
     for (i = 0; i < n_chars; ++i)
825b56f
     {
825b56f
 	if (s[i] == 0x0a)
825b56f
 	{
825b56f
-	    *result++ = '\0';
825b56f
+	    tmp[i] = '\0';
825b56f
 	    break;
825b56f
 	}
825b56f
 	else if (s[i] == 0x00)
825b56f
 	{
825b56f
 	    /* Convert embedded 0's to spaces */
825b56f
-	    *result++ = ' ';
825b56f
+	    tmp[i] = ' ';
825b56f
 	}
825b56f
 	else
825b56f
 	{
825b56f
-	    *result++ = s[i];
825b56f
+	    tmp[i] = s[i];
825b56f
 	}
825b56f
     }
825b56f
+
825b56f
+    if (prev)
825b56f
+    {
825b56f
+       ret = g_strjoin(NULL, prev, tmp, NULL);
825b56f
+       g_free(prev);
825b56f
+       g_free(tmp);
825b56f
+    }
825b56f
+    else
825b56f
+    {
825b56f
+       ret = tmp;
825b56f
+    }
825b56f
+
825b56f
+    return ret;
825b56f
 }
825b56f
 
825b56f
 static void
825b56f
@@ -379,13 +396,16 @@ decode_display_descriptor (const uchar *
825b56f
     switch (desc[0x03])
825b56f
     {
825b56f
     case 0xFC:
825b56f
-	decode_lf_string (desc + 5, 13, info->dsc_product_name);
825b56f
+	info->dsc_product_name = decode_lf_string (desc + 5, 13,
825b56f
+                                                   info->dsc_product_name);
825b56f
 	break;
825b56f
     case 0xFF:
825b56f
-	decode_lf_string (desc + 5, 13, info->dsc_serial_number);
825b56f
+	info->dsc_serial_number = decode_lf_string (desc + 5, 13,
825b56f
+                                                    info->dsc_serial_number);
825b56f
 	break;
825b56f
     case 0xFE:
825b56f
-	decode_lf_string (desc + 5, 13, info->dsc_string);
825b56f
+	info->dsc_string = decode_lf_string (desc + 5, 13,
825b56f
+                                             info->dsc_string);
825b56f
 	break;
825b56f
     case 0xFD:
825b56f
 	/* Range Limits */
825b56f
@@ -514,6 +534,18 @@ decode_check_sum (const uchar *edid,
825b56f
     info->checksum = check;
825b56f
 }
825b56f
 
825b56f
+void
825b56f
+free_edid (MonitorInfo *info)
825b56f
+{
825b56f
+    if (info)
825b56f
+    {
825b56f
+	g_free (info->dsc_product_name);
825b56f
+	g_free (info->dsc_serial_number);
825b56f
+	g_free (info->dsc_string);
825b56f
+    }
825b56f
+    g_free (info);
825b56f
+}
825b56f
+
825b56f
 MonitorInfo *
825b56f
 decode_edid (const uchar *edid)
825b56f
 {
825b56f
diff -up gnome-desktop-2.27.4/libgnome-desktop/gnome-rr-config.c.concatenate-edid-descriptors gnome-desktop-2.27.4/libgnome-desktop/gnome-rr-config.c
825b56f
--- gnome-desktop-2.27.4/libgnome-desktop/gnome-rr-config.c.concatenate-edid-descriptors	2009-06-29 19:35:54.000000000 -0400
825b56f
+++ gnome-desktop-2.27.4/libgnome-desktop/gnome-rr-config.c	2009-07-15 12:47:57.734218844 -0400
825b56f
@@ -491,7 +491,7 @@ gnome_rr_config_new_current (GnomeRRScre
825b56f
 	    output->display_name = make_display_name (
825b56f
 		gnome_rr_output_get_name (rr_output), info);
825b56f
 		
825b56f
-	    g_free (info);
825b56f
+	    free_edid (info);
825b56f
 		
825b56f
 	    crtc = gnome_rr_output_get_crtc (rr_output);
825b56f
 	    mode = crtc? gnome_rr_crtc_get_current_mode (crtc) : NULL;