changeset 65459:41f88837ca5b

(x_encode_text): Declare static. Add FREEP arg. (x_set_name_internal): Call x_encode_text with new FREEP arg to know if xfree is needed instead of guessing.
author Kim F. Storm <storm@cua.dk>
date Mon, 12 Sep 2005 10:27:20 +0000
parents 02e47d7a9bca
children 4880487753ec
files src/xfns.c
diffstat 1 files changed, 10 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/xfns.c	Mon Sep 12 10:27:02 2005 +0000
+++ b/src/xfns.c	Mon Sep 12 10:27:20 2005 +0000
@@ -1515,11 +1515,12 @@
    Otherwise store 0 in *STRINGP, which means that the `encoding' of
    the result should be `COMPOUND_TEXT'.  */
 
-unsigned char *
-x_encode_text (string, coding_system, selectionp, text_bytes, stringp)
+static unsigned char *
+x_encode_text (string, coding_system, selectionp, text_bytes, stringp, freep)
      Lisp_Object string, coding_system;
      int *text_bytes, *stringp;
      int selectionp;
+     int *freep;
 {
   unsigned char *str = SDATA (string);
   int chars = SCHARS (string);
@@ -1536,6 +1537,7 @@
       /* No multibyte character in OBJ.  We need not encode it.  */
       *text_bytes = bytes;
       *stringp = 1;
+      *freep = 0;
       return str;
     }
 
@@ -1563,6 +1565,7 @@
   *stringp = (charset_info == 1
 	      || (!EQ (coding_system, Qcompound_text)
 		  && !EQ (coding_system, Qcompound_text_with_extensions)));
+  *freep = 1;
   return buf;
 }
 
@@ -1601,16 +1604,13 @@
 	   in the future which can encode all Unicode characters.
 	   But, for the moment, there's no way to know that the
 	   current window manager supports it or not.  */
-	text.value = x_encode_text (name, coding_system, 0, &bytes, &stringp);
+	text.value = x_encode_text (name, coding_system, 0, &bytes, &stringp,
+				    &do_free_text_value);
 	text.encoding = (stringp ? XA_STRING
 			 : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT);
 	text.format = 8;
 	text.nitems = bytes;
 
-        /* Check early, because ENCODE_UTF_8 below may GC and name may be
-           relocated.  */
-        do_free_text_value = text.value != SDATA (name);
-
 	if (NILP (f->icon_name))
 	  {
 	    icon = text;
@@ -1619,12 +1619,11 @@
 	  {
 	    /* See the above comment "Note: Encoding strategy".  */
 	    icon.value = x_encode_text (f->icon_name, coding_system, 0,
-					&bytes, &stringp);
+					&bytes, &stringp, &do_free_icon_value);
 	    icon.encoding = (stringp ? XA_STRING
 			     : FRAME_X_DISPLAY_INFO (f)->Xatom_COMPOUND_TEXT);
 	    icon.format = 8;
 	    icon.nitems = bytes;
-            do_free_icon_value = icon.value != SDATA (f->icon_name);
 	  }
 
 #ifdef USE_GTK
@@ -1987,7 +1986,7 @@
 	 - the same but with the family also replaced with -*-*-.  */
       char *p = base_fontname;
       int i;
-      
+
       for (i = 0; *p; p++)
 	if (*p == '-') i++;
       if (i != 14)
@@ -2011,7 +2010,7 @@
 	  char *allcs = "*-*-*-*-*-*-*";
 	  char *allfamilies = "-*-*-";
 	  char *all = "*-*-*-*-";
-	  
+
 	  for (i = 0, p = base_fontname; i < 8; p++)
 	    {
 	      if (*p == '-')