]> code.delx.au - gnu-emacs/blobdiff - src/ftxfont.c
batch write-region no longer says "Wrote FOO"
[gnu-emacs] / src / ftxfont.c
index 53f2616bb62a86306bba486e9590ef133d763c47..52d844597ee1a7e9236338f5f9421fb4434a5d85 100644 (file)
@@ -1,5 +1,5 @@
 /* ftxfont.c -- FreeType font driver on X (without using XFT).
 /* ftxfont.c -- FreeType font driver on X (without using XFT).
-   Copyright (C) 2006-2014 Free Software Foundation, Inc.
+   Copyright (C) 2006-2015 Free Software Foundation, Inc.
    Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H13PRO009
    Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H13PRO009
@@ -59,7 +59,7 @@ ftxfont_get_gcs (struct frame *f, unsigned long foreground, unsigned long backgr
   XColor color;
   XGCValues xgcv;
   int i;
   XColor color;
   XGCValues xgcv;
   int i;
-  struct ftxfont_frame_data *data = font_get_frame_data (f, &ftxfont_driver);
+  struct ftxfont_frame_data *data = font_get_frame_data (f, Qftx);
   struct ftxfont_frame_data *prev = NULL, *this = NULL, *new;
 
   if (data)
   struct ftxfont_frame_data *prev = NULL, *this = NULL, *new;
 
   if (data)
@@ -78,19 +78,11 @@ ftxfont_get_gcs (struct frame *f, unsigned long foreground, unsigned long backgr
        }
     }
 
        }
     }
 
-  new = malloc (sizeof *new);
-  if (! new)
-    return NULL;
+  new = xmalloc (sizeof *new);
   new->next = this;
   if (prev)
   new->next = this;
   if (prev)
-    {
       prev->next = new;
       prev->next = new;
-    }
-  else if (font_put_frame_data (f, &ftxfont_driver, new) < 0)
-    {
-      free (new);
-      return NULL;
-    }
+  font_put_frame_data (f, Qftx, new);
 
   new->colors[0].pixel = background;
   new->colors[1].pixel = foreground;
 
   new->colors[0].pixel = background;
   new->colors[1].pixel = foreground;
@@ -123,8 +115,8 @@ ftxfont_get_gcs (struct frame *f, unsigned long foreground, unsigned long backgr
       if (prev)
        prev->next = new->next;
       else if (data)
       if (prev)
        prev->next = new->next;
       else if (data)
-       font_put_frame_data (f, &ftxfont_driver, new->next);
-      free (new);
+       font_put_frame_data (f, Qftx, new->next);
+      xfree (new);
       return NULL;
     }
   return new->gcs;
       return NULL;
     }
   return new->gcs;
@@ -279,10 +271,11 @@ ftxfont_draw (struct glyph_string *s, int from, int to, int x, int y,
 
   n[0] = n[1] = n[2] = n[3] = n[4] = n[5] = n[6] = 0;
 
 
   n[0] = n[1] = n[2] = n[3] = n[4] = n[5] = n[6] = 0;
 
+  USE_SAFE_ALLOCA;
+  SAFE_NALLOCA (code, 1, len);
   block_input ();
   if (with_background)
     ftxfont_draw_background (f, font, s->gc, x, y, s->width);
   block_input ();
   if (with_background)
     ftxfont_draw_background (f, font, s->gc, x, y, s->width);
-  code = alloca (sizeof (unsigned) * len);
   for (i = 0; i < len; i++)
     code[i] = ((XCHAR2B_BYTE1 (s->char2b + from + i) << 8)
               | XCHAR2B_BYTE2 (s->char2b + from + i));
   for (i = 0; i < len; i++)
     code[i] = ((XCHAR2B_BYTE1 (s->char2b + from + i) << 8)
               | XCHAR2B_BYTE2 (s->char2b + from + i));
@@ -330,6 +323,7 @@ ftxfont_draw (struct glyph_string *s, int from, int to, int x, int y,
     }
 
   unblock_input ();
     }
 
   unblock_input ();
+  SAFE_FREE ();
 
   return len;
 }
 
   return len;
 }
@@ -337,7 +331,7 @@ ftxfont_draw (struct glyph_string *s, int from, int to, int x, int y,
 static int
 ftxfont_end_for_frame (struct frame *f)
 {
 static int
 ftxfont_end_for_frame (struct frame *f)
 {
-  struct ftxfont_frame_data *data = font_get_frame_data (f, &ftxfont_driver);
+  struct ftxfont_frame_data *data = font_get_frame_data (f, Qftx);
 
   block_input ();
   while (data)
 
   block_input ();
   while (data)
@@ -347,11 +341,11 @@ ftxfont_end_for_frame (struct frame *f)
 
       for (i = 0; i < 6; i++)
        XFreeGC (FRAME_X_DISPLAY (f), data->gcs[i]);
 
       for (i = 0; i < 6; i++)
        XFreeGC (FRAME_X_DISPLAY (f), data->gcs[i]);
-      free (data);
+      xfree (data);
       data = next;
     }
   unblock_input ();
       data = next;
     }
   unblock_input ();
-  font_put_frame_data (f, &ftxfont_driver, NULL);
+  font_put_frame_data (f, Qftx, NULL);
   return 0;
 }
 
   return 0;
 }