guile-elisp bootstrap (lisp)
[bpt/emacs.git] / src / gtkutil.c
index ae929a2..fcb4224 100644 (file)
@@ -498,7 +498,7 @@ get_utf8_string (const char *str)
       len = strlen (str);
       if ((min (PTRDIFF_MAX, SIZE_MAX) - len - 1) / 4 < nr_bad)
        memory_full (SIZE_MAX);
-      up = utf8_str = xmalloc (len + nr_bad * 4 + 1);
+      up = utf8_str = xmalloc_atomic (len + nr_bad * 4 + 1);
       p = (unsigned char *)str;
 
       while (! (cp = g_locale_to_utf8 ((char *)p, -1, &bytes_read,
@@ -1637,7 +1637,7 @@ xg_maybe_add_timer (gpointer data)
 static int
 xg_dialog_run (struct frame *f, GtkWidget *w)
 {
-  ptrdiff_t count = SPECPDL_INDEX ();
+  dynwind_begin ();
   struct xg_dialog_data dd;
 
   xg_set_screen (w, f);
@@ -1665,7 +1665,7 @@ xg_dialog_run (struct frame *f, GtkWidget *w)
   g_main_loop_run (dd.loop);
 
   dd.w = 0;
-  unbind_to (count, Qnil);
+  dynwind_end ();
 
   return dd.response;
 }
@@ -1695,7 +1695,13 @@ typedef char * (*xg_get_file_func) (GtkWidget *);
 static char *
 xg_get_file_name_from_chooser (GtkWidget *w)
 {
-  return gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (w));
+  char *s1, *s2;
+  s1 = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (w));
+  if (! s1)
+    return NULL;
+  s2 = xstrdup (s1);
+  g_free (s1);
+  return s2;
 }
 
 /* Callback called when the "Show hidden files" toggle is pressed.
@@ -2113,7 +2119,7 @@ make_cl_data (xg_menu_cb_data *cl_data, struct frame *f, GCallback highlight_cb)
 {
   if (! cl_data)
     {
-      cl_data = xmalloc (sizeof *cl_data);
+      cl_data = xmalloc_uncollectable (sizeof *cl_data);
       cl_data->f = f;
       cl_data->menu_bar_vector = f->menu_bar_vector;
       cl_data->menu_bar_items_used = f->menu_bar_items_used;
@@ -4787,15 +4793,15 @@ update_frame_tool_bar (struct frame *f)
             {
               w = gtk_image_new_from_stock (stock_name, icon_size);
               g_object_set_data_full (G_OBJECT (w), XG_TOOL_BAR_STOCK_NAME,
-                                      (gpointer) xstrdup (stock_name),
-                                      (GDestroyNotify) xfree);
+                                      (gpointer) g_strdup (stock_name),
+                                      (GDestroyNotify) g_free);
             }
           else if (icon_name)
             {
               w = gtk_image_new_from_icon_name (icon_name, icon_size);
               g_object_set_data_full (G_OBJECT (w), XG_TOOL_BAR_ICON_NAME,
-                                      (gpointer) xstrdup (icon_name),
-                                      (GDestroyNotify) xfree);
+                                      (gpointer) g_strdup (icon_name),
+                                      (GDestroyNotify) g_free);
             }
           else
             {