+/* The caller is responsible for freeing the returned string. */
+static Bufbyte *
+generate_title_string (struct window *w, Lisp_Object format_str,
+ face_index findex, int type)
+{
+ struct display_line *dl;
+ struct display_block *db;
+ int elt = 0;
+
+ dl = &title_string_display_line;
+ db = get_display_block_from_line (dl, TEXT);
+ Dynarr_reset (db->runes);
+
+ generate_formatted_string_db (format_str, Qnil, w, dl, db, findex, 0,
+ -1, type);
+
+ Dynarr_reset (title_string_emchar_dynarr);
+ while (elt < Dynarr_length (db->runes))
+ {
+ if (Dynarr_atp (db->runes, elt)->type == RUNE_CHAR)
+ Dynarr_add (title_string_emchar_dynarr,
+ Dynarr_atp (db->runes, elt)->object.chr.ch);
+ elt++;
+ }
+
+ return
+ convert_emchar_string_into_malloced_string
+ (Dynarr_atp (title_string_emchar_dynarr, 0),
+ Dynarr_length (title_string_emchar_dynarr), 0);
+}
+