# HG changeset patch # User Kim F. Storm # Date 1126520840 0 # Node ID 41f88837ca5bf14889711b38fd6d23441fc120c1 # Parent 02e47d7a9bcab5d371fb8875e44a48a5ef2fe60f (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. diff -r 02e47d7a9bca -r 41f88837ca5b src/xfns.c --- 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 == '-')