diff options
author | Mathias Hasselmann <mathias.hasselmann@gmx.de> | 2007-03-14 00:28:49 +0100 |
---|---|---|
committer | Behdad Esfahbod <behdad@behdad.org> | 2007-04-08 21:12:02 -0400 |
commit | 241482b5505427d221f4aaa970e7500a78fb2da1 (patch) | |
tree | d8594fd0ef70e549d328eb73f035b4b031eb3626 /src/cairo-region.c | |
parent | efc9775149c4c87645c58235c7626cc4f72e69c3 (diff) | |
download | cairo-241482b5505427d221f4aaa970e7500a78fb2da1.tar.gz |
Avoid malloc in _cairo_region_create_from_rectangle
Diffstat (limited to 'src/cairo-region.c')
-rw-r--r-- | src/cairo-region.c | 34 |
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; } /** |