img->prev = NULL;
c->buckets[i] = img;
}
-
-
-/* Call FN on every image in the image cache of frame F. Used to mark
- Lisp Objects in the image cache. */
-
-/* Mark Lisp objects in image IMG. */
-
-static void
-mark_image (struct image *img)
-{
- mark_object (img->spec);
- mark_object (img->dependencies);
-
- if (!NILP (img->lisp_data))
- mark_object (img->lisp_data);
-}
-
-
-void
-mark_image_cache (struct image_cache *c)
-{
- if (c)
- {
- ptrdiff_t i;
- for (i = 0; i < c->used; ++i)
- if (c->images[i])
- mark_image (c->images[i]);
- }
-}
-
-
\f
/***********************************************************************
X / NS / W32 support code
}
/* Allocate image raster. */
- (*ximg)->data = xmalloc ((*ximg)->bytes_per_line * height);
+ (*ximg)->data = xmalloc_atomic ((*ximg)->bytes_per_line * height);
/* Allocate a pixmap of the same size. */
*pixmap = XCreatePixmap (display, window, width, height, depth);
if (fp)
{
- ptrdiff_t count = SPECPDL_INDEX ();
+ dynwind_begin ();
record_unwind_protect_ptr (fclose_unwind, fp);
if (fstat (fileno (fp), &st) == 0
}
}
- unbind_to (count, Qnil);
+ dynwind_end ();
}
return buf;
}
bytes_per_line = (*width + 7) / 8 + padding_p;
nbytes = bytes_per_line * *height;
- p = *data = xmalloc (nbytes);
+ p = *data = xmalloc_atomic (nbytes);
if (v10)
{
#endif /* HAVE_NTGUI */
/* Remember allocated colors. */
- img->colors = xnmalloc (attrs.nalloc_pixels, sizeof *img->colors);
+ img->colors = xnmalloc_atomic (attrs.nalloc_pixels,
+ sizeof *img->colors);
img->ncolors = attrs.nalloc_pixels;
for (i = 0; i < attrs.nalloc_pixels; ++i)
{
}
else
{
- colors = xmalloc (ct_colors_allocated * sizeof *colors);
+ colors = xmalloc_atomic (ct_colors_allocated * sizeof *colors);
*n = ct_colors_allocated;
for (i = j = 0; i < CT_SIZE; ++i)
if (min (PTRDIFF_MAX, SIZE_MAX) / sizeof *rows < height
|| min (PTRDIFF_MAX, SIZE_MAX) / sizeof *pixels / height < row_bytes)
memory_full (SIZE_MAX);
- c->pixels = pixels = xmalloc (sizeof *pixels * row_bytes * height);
- c->rows = rows = xmalloc (height * sizeof *rows);
+ c->pixels = pixels = xmalloc_atomic (sizeof *pixels * row_bytes * height);
+ c->rows = rows = xmalloc_atomic (height * sizeof *rows);
for (i = 0; i < height; ++i)
rows[i] = pixels + i * row_bytes;
return 0;
}
- buf = xmalloc (sizeof *buf * width * height);
+ buf = xmalloc_atomic (sizeof *buf * width * height);
rc = fn_TIFFReadRGBAImage (tiff, width, height, buf, 0);
void
syms_of_image (void)
{
+#include "image.x"
+
/* Initialize this only once; it will be reset before dumping. */
image_types = NULL;
#endif /* HAVE_NTGUI */
#endif /* HAVE_RSVG */
- defsubr (&Sinit_image_library);
-#ifdef HAVE_IMAGEMAGICK
- defsubr (&Simagemagick_types);
-#endif
- defsubr (&Sclear_image_cache);
- defsubr (&Simage_flush);
- defsubr (&Simage_size);
- defsubr (&Simage_mask_p);
- defsubr (&Simage_metadata);
-
-#ifdef GLYPH_DEBUG
- defsubr (&Simagep);
- defsubr (&Slookup_image);
-#endif
-
DEFVAR_BOOL ("cross-disabled-images", cross_disabled_images,
doc: /* Non-nil means always draw a cross over disabled images.
Disabled images are those having a `:conversion disabled' property.