summaryrefslogtreecommitdiff
path: root/src/cairo-region.c
diff options
context:
space:
mode:
authorMathias Hasselmann <mathias.hasselmann@gmx.de>2007-03-14 00:28:49 +0100
committerBehdad Esfahbod <behdad@behdad.org>2007-04-08 21:12:02 -0400
commit241482b5505427d221f4aaa970e7500a78fb2da1 (patch)
treed8594fd0ef70e549d328eb73f035b4b031eb3626 /src/cairo-region.c
parentefc9775149c4c87645c58235c7626cc4f72e69c3 (diff)
downloadcairo-241482b5505427d221f4aaa970e7500a78fb2da1.tar.gz
Avoid malloc in _cairo_region_create_from_rectangle
Diffstat (limited to 'src/cairo-region.c')
-rw-r--r--src/cairo-region.c34
1 files changed, 16 insertions, 18 deletions
diff --git a/src/cairo-region.c b/src/cairo-region.c
index 4ba28522d..1e1c86fda 100644
--- a/src/cairo-region.c
+++ b/src/cairo-region.c
@@ -36,30 +36,28 @@
#include "cairoint.h"
/**
- * _cairo_region_create_from_rectangle:
+ * _cairo_region_init_from_rectangle:
+ * @region: a #pixman_region16_t
* @rect: a #cairo_rectangle_int16_t
*
- * Creates a region with extents initialized from the given
- * rectangle.
+ * Initializes a region with extents from the given rectangle.
*
- * Return value: a newly created #pixman_region16_t or %NULL if
- * memory couldn't a allocated.
+ * Return value: #CAIRO_STATUS_SUCCESS on success, or
+ * #CAIRO_STATUS_NO_MEMORY when pixman fails to initialize
+ * the region.
**/
-pixman_region16_t *
-_cairo_region_create_from_rectangle (cairo_rectangle_int16_t *rect)
+cairo_status_t
+_cairo_region_init_from_rectangle (pixman_region16_t *region,
+ cairo_rectangle_int16_t *rect)
{
- /* We can't use pixman_region_create_simple(), because it doesn't
- * have an error return
- */
- pixman_region16_t *region = pixman_region_create ();
- if (pixman_region_union_rect (region, region,
- rect->x, rect->y,
- rect->width, rect->height) != PIXMAN_REGION_STATUS_SUCCESS) {
- pixman_region_destroy (region);
- return NULL;
- }
+ pixman_region_init (region, NULL);
+
+ if (PIXMAN_REGION_STATUS_SUCCESS == pixman_region_union_rect (
+ region, region, rect->x, rect->y, rect->width, rect->height))
+ return CAIRO_STATUS_SUCCESS;
- return region;
+ pixman_region_uninit (region);
+ return CAIRO_STATUS_NO_MEMORY;
}
/**